2014-10-30 131 views
0

票证有一个ID,TicketNbr和Time Entries有一个ID Time_RecID。票证有0,1或可能更多与TicketNbr相关的时间条目。SQL GROUP BY Aggregate

我想产生像这样的列表:

Time Entries | Tickets 
      10 | # 
      9 | # 
      8 | # 
      7 | # 
      6 | # 
      5 | # 
      4 | # 
      3 | # 
      2 | # 
      1 | # 

的门票数量。

数据来自两个表:v_rpt_Service(TicketNbr)和v_rpt_Time(Time_RecID)。我所有的相关数据都是使用下面的SQL发现的:

SELECT 
    s.TicketNbr, t.Time_RecID 
FROM 
    v_rpt_Service s 
    LEFT JOIN v_rpt_time t on s.TicketNbr = t.SR_Service_RecID 

我在哪里挣扎的是聚合。理想情况下,我正在寻找的是:

SELECT 
    COUNT(T.Time_recID) as Time_Entries, COUNT(DISTINCT(s.TicketNbr)) as Tickets 
FROM 
    v_rpt_Service s 
    LEFT JOIN v_rpt_time t on s.TicketNbr = t.SR_Service_RecID 
GROUP BY 
    COUNT(t.Time_recID) 

导致这个错误:

Msg 144, Level 15, State 1, Line 8 Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause.

如何重构初始查询给我像输出上面的列表?

回答

1
SELECT q.TimeEntries,count(q.TicketNbr) As Tickets 
FROM (SELECT 
      s.TicketNbr, count(t.Time_RecID) As TimeEntries 
     FROM 
      v_rpt_Service s 
     LEFT JOIN v_rpt_time t on s.TicketNbr = t.Time_RecID 
     GROUP BY s.TicketNbr) As q 
GROUP BY q.TimeEntries 
ORDER BY q.TimeEntries DESC 

您可能需要考虑当车票已经没有时间条目(我假设可能是考虑到LEFT JOIN

+0

了它!我必须做的唯一改变是左加入 - T.Time_RecID是时间条目的ID,TicketNbr是门票的ID。我现在看到我提出了错误的问题(我已更新) - s.TicketNbr = t.SR_Service_RecID上的LEFT JOIN v_rpt_Time t。 谢谢,西蒙!这做到了! – dijikul 2014-10-30 22:12:55

+0

@dijikul,很高兴我能帮上忙。请标记为答案,以便其他人知道您的问题已解决。 – Simon1979 2014-10-30 22:16:23

1

您可以嵌套查询的情况下,会发生什么:

SELECT TicketNbr, count(Time_RecID) 
FROM 
(SELECT 
    s.TicketNbr, t.Time_RecID 
FROM 
    v_rpt_Service s 
    LEFT JOIN v_rpt_time t on s.TicketNbr = t.Time_RecID) AS table 
GROUP BY 
Time_RecID