我有一个问题,我无法绕过头脑。我正在尝试做的是提出一个报告,其中包含主要(会计,商业等)的行,其中包含注册类型(已注册,撤回等)的列,每个列都有计数。现在,这是我的问题。
SELECT datatel_academicprogramofinterestidname, datatel_prospectstatusname
FROM FilteredContact
GROUP BY datatel_academicprogramofinterestidname, datatel_prospectstatusname
这给了我表格中这两个字段的每个组合。我想获得要显示的每个组合的计数。行将是interestidname字段,列将是prospectstatusname字段。在每个单元格中,将计算该特定组合中的多少(例如,会计/登记)
我尝试过多种方式,但似乎无法按照我想要的方式打破列。不知道如何使用group by,count和my 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 :(得分:0)
您可以在此处使用数据透视表。我创建了一个 SQL Fiddle 来配合这个。假设您的主键字段名称是p_id
SELECT *
FROM FilteredContact
PIVOT ( count(p_id)
for datatel_prospectstatusname IN ([Accepted], [Enrolled])
) as p
答案 1 :(得分: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