2013-05-20 26 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 
相关问题