2013-05-20 34 views
0

我有一個查詢,我有麻煩纏繞我的頭。我想要做的是拿出一份報告,其中包含主要行業(會計,商業等)和註冊類型(註冊,撤回等)的列,並對每個列進行計數。現在,這是我的查詢。在一張桌子上計算行/列的組合

SELECT datatel_academicprogramofinterestidname, datatel_prospectstatusname 
FROM FilteredContact 
GROUP BY datatel_academicprogramofinterestidname, datatel_prospectstatusname 

這給了我在表格中找到的這兩個字段的所有組合。我想要顯示每個組合的計數。這些行將是interestidname字段,並且這些列將是prospectstatusname字段。在每個單元格中,會計算出具體組合的數量(例如,會計/登記)

我試過以多種方式計數,但似乎無法使其突破列我想要。不知道如何使用group by,count和我的where子句全部結合使其格式化成我想要的。好消息是我所有的信息都在一張桌子上,我無法讓它看起來像我想要的。

|Accounting (BS)        | Accepted | 25| 
|Acting (BFA)        | Accepted | 32|  
|Advertising & Marketing Communications (BA) | Accepted | 29| 
|American Studies (BA)      | Accepted | 2|  
|Accounting (BS)        | Enrolled | 5|  
|Acting (BFA)        | Enrolled | 17|  
|Advertising & Marketing Communications (BA) | Enrolled | 40| 
|American Studies (BA)      | Enrolled | 10|  
+0

你不使用'GROUP BY'無一個聚合。 – Kermit

回答

0

您可以在此處使用數據透視表。我創建了一個SQL Fiddle與此一起。假設您的主鍵字段名的p_id

SELECT * 
FROM FilteredContact 
PIVOT (count(p_id) 
     for datatel_prospectstatusname IN ([Accepted], [Enrolled]) 
    ) as p 
+0

這真的很接近我想要的。有沒有辦法將prospectstatusname視爲列而不是行? –

+0

是的,SQL Server。 –

+0

我基於您爲我寫的查詢添加了一些數據。基本上我想要行說會計,代理,廣告等,然後列將被接受/登記,計數是這兩個領域的組合。閱讀起來更容易,而不是全部垂直。即使他們沒有必要,我也包括了這些數字。這些只是我現在從我的查詢中得到的數字。 –

0

可以使用聚合函數與CASE表情輕鬆地將數據行轉換成列:

select interestidname, 
    sum(case when datatel_prospectstatusname = 'Enrolled' then 1 else 0 end) Enrolled, 
    sum(case when datatel_prospectstatusname = 'Accepted' then 1 else 0 end) Accepted 
from FilteredContact 
group by interestidname 
相關問題