2014-10-30 181 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