Sql 计算一个表中的行/列组合

Sql 计算一个表中的行/列组合,sql,select,group-by,Sql,Select,Group By,我有一个疑问,我很难理解。我想做的是生成一个报告,其中包含专业(会计、商业等)的行,以及注册类型(注册、撤销等)的列,每个列都有计数。现在,我的问题是 SELECT datatel_academicprogramofinterestidname, datatel_prospectstatusname FROM FilteredContact GROUP BY datatel_academicprogramofinterestidname, datatel_prospectstatusname

我有一个疑问,我很难理解。我想做的是生成一个报告,其中包含专业(会计、商业等)的行,以及注册类型(注册、撤销等)的列,每个列都有计数。现在,我的问题是

SELECT datatel_academicprogramofinterestidname, datatel_prospectstatusname
FROM FilteredContact
GROUP BY datatel_academicprogramofinterestidname, datatel_prospectstatusname
这就给出了表中这两个字段的所有组合。我想获得要显示的每个组合的计数。行是InterestID名称字段,列是prospectstatusname字段。在每个单元格中都会有一个特定组合的计数(例如,会计/登记)

我尝试了多种方法来计数,但似乎无法按我想要的方式将列分开。不知道如何结合使用GROUPBY、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|    

您可以在此处使用枢轴。我创建了一个来支持这一点。假设主键字段名为p_id

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

您可以使用带有
大小写
表达式的聚合函数轻松地将数据行转换为列:

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

那真的很接近我想要的。有没有办法将prospectstatusname视为列而不是行?我根据您为我编写的查询向问题中添加了一些数据。基本上,我希望行表示会计、表演、广告等,然后列将被接受/注册,计数是这两个字段的组合。它更容易阅读,而不是让它们都垂直。我包括了计数,即使它们不是必需的。这些就是我现在从查询中得到的数字。它们表示两个字段的特定组合出现在表中的次数,这就是我要查找的。我只希望注册/接受的字段是列。我在尝试SQL时遇到了这个错误:PIVOT SQL构造或语句不受支持。它在SQL FIDLE中可以完美地工作,但在我的本地环境中不能。数字字段实际上仅来自查询,而不是数据库本身。能否在FilteredContact中提供列名?只有您提供的两个吗?如果没有聚合,您不能使用
groupby