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
。