простой вопрос SQLPLUS .. мой ответ неверен - PullRequest
0 голосов
/ 14 февраля 2012

Мне нужно рассчитать общее количество дней, потраченных на разрешение билетов на январь 2012 года для каждого технического персонала, и перечислить их в порядке возрастания.

Я попытался переписать вопрос, чтобы сделать его более понятнымсначала вот так

Найдите все технические документы на билеты в январе 2012 года и отобразите общее количество дней, потраченных на каждый из них.

Вот моя попытка

select pplSoft, days_worked_on as pplWorkedOn 
from Tickets, Tech_personnel 
where date_submitted >= '01-JAN-2012' AND date_submitted <= '31-JAN-2012' 
group by pplSoft having pplWorkedOn =
   (select days_worked_on WHERE date_submitted >= '01-JAN-2012'
    AND date_submitted <= '31-JAN-2012');

Что не так ... помощь приветствуется!

TECH PERSONNEL (pplSoft, fname, lname, pittID, expertise, office phone) where fname is first name, and lname is last name.

USERS (pplSoft, fname, lname, pittID, office phone)

CATEGORIES (category id, category, description) where this table lists all possible categories of submitted tickets.

INVENTORY(machine name, IP, network port, MACADDR, location id)

LOCATIONS(location id, location, building, notes)

TICKETS (ticket number, owner pplSoft, date submitted, date closed, days worked on, category id, machine name, location, description)

ASSIGNMENT (ticket number, tech pplSoft, date assigned, status) where status held is an enumeration, could be: assigned, in progress, delegated, closed successful, or closed unsuccessful.

Ответы [ 5 ]

0 голосов
/ 14 февраля 2012

Столбец PPLSOFT на БИЛЕТАХ является владельцем, а не лицом, работающим над билетом.Чтобы получить технический персонал, вам нужно включить в набор ASSIGNMENTS.

select tech.pplSoft
       , sum(tic.days_worked_on) as pplWorkedOn 
from Tickets tic 
         join assignments ass on ( ass.ticket = tic.ticket )
         join Tech_personnel tech on ( ass.pplSoft = tech.pplSoft ) 
where ass.date_submitted >= to_date('01-JAN-2012') 
and ass.date_submitted <= to_date('31-JAN-2012')
group by tech.pplSoft

Теперь это, вероятно, все еще не даст вам ответ, который вы хотите.Это из-за недостатков в вашей модели данных.

Столбец DAYS_WORKED_ON хранится на уровне TICKET, поэтому, если над билетом работали два человека, количество дней будет учтено дважды.Кроме того, дни, отработанные в течение января для билета, поднятого 31 декабря 2011 года, не будут учитываться.Чтобы получить точную цифру, вам нужно отслеживать дни, в течение которых каждый человек работает с билетом.

Хотя в столбце ASSIGNMENTS.STATUS, похоже, содержатся состояния, связанные с БИЛЕТОМ.Не уверен, является ли это еще одной проблемой с вашей моделью или указанием на то, что я не смог понять действительное назначение НАЗНАЧЕНИЙ.

0 голосов
/ 14 февраля 2012
SELECT owner_pplSoft as pplSoft, SUM(days_worked_on) AS pplWorkedOn 
FROM tickets
WHERE date_submitted >= to_date('01-JAN-2012', 'dd-mon-yyyy') 
  AND date_submitted <= to_date('31-JAN-2012', 'dd-mon-yyyy')
GROUP BY owner_pplSoft
ORDER BY SUM(days_worked_on)
0 голосов
/ 14 февраля 2012

Если я правильно понял схему ...

SELECT PPLSOFT, SUM(DAYS_WORKED_ON)
FROM   TECH_PERSONNEL, TICKETS
WHERE  TECH_PERSONNEL.PPLSOFT = TICKETS.OWNER
AND    DATE_SUBMITTED >= TO_DATE('1/1/2012', 'DD/MM/YHYYY')
AND    DATE_SUBMITTED <= TO_DATE('31/1/2012', 'DD/MM/YYYY')
GROUP BY PPLSOFT
ORDER BY PPLSOFT

или

ORDER BY SUM(DAYS_WORKED_ON) DESC

в зависимости от того, что вы хотите

0 голосов
/ 14 февраля 2012

Я надеюсь, что это правильно:

select pplSoft, sum(TO_CHAR(todays_worked_on,'mm-dd-yyyy')) 
from Tickets tc, Tech_personnel tp
where tp.pplSoft=tc.pplSoft
and (date_submitted between TO_DATE('01-01-2012','mm-dd-yyyy') 
and TO_DATE('01-31-2012','mm-dd-yyyy'))
group by pplSoft,TO_CHAR(todays_worked_on,'mm-dd-yyyy')
0 голосов
/ 14 февраля 2012
SELECT owner_pplSoft, SUM(days_worked_on) AS sum_days_worked_on
FROM Tickets
WHERE date_submitted >= '01-JAN-2012' AND date_submitted <= '31-JAN-2012'
GROUP BY owner_pplSoft
ORDER BY SUM(days_worked_on)
...