简单的SQLPLUS问题..我的回答是错误的

时间:2012-02-13 22:33:18

标签: sql database oracle sqlplus

我需要计算解决当月票的总天数 2012年1月为每位技术人员按升序排列。

我试图重写这个问题,首先让它更清晰,所以这里

查找2012年1月门票的所有技术ppls,并显示每个门票的总天数。

继承我的尝试

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 :(得分:0)

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)

答案 1 :(得分:0)

如果我已正确理解架构......

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

取决于你想要的

答案 2 :(得分:0)

我希望这个是对的:

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')

答案 3 :(得分:0)

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)

答案 4 :(得分:0)

TICKETS上的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级别,因此如果两个人在票证上工作,则天数将被重复计算。此外,整个1月份在2011年12月31日提出的机票的工作天数不计算在内。要获得准确的数字,您需要跟踪每个人在机票上工作的日期。

尽管ASSIGNMENTS.STATUS列似乎保留了与TICKET相关的状态。不确定这是否是您的模型的另一个问题,或者表明我未能理解ASSIGNMENTS的实际目的。