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|    
4

2 回答 2

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
于 2013-05-20T21:31:44.963 回答
0

您可以在此处使用枢轴。我创建了一个SQL Fiddle来配合这个。假设您的主键字段名称是 p_id

SELECT *
FROM FilteredContact 
PIVOT ( count(p_id)
        for datatel_prospectstatusname IN ([Accepted], [Enrolled])
      ) as p
于 2013-05-20T20:52:26.213 回答