【问题标题】:Counting Combinations of rows/columns across one table计算一张表中的行/列组合
【发布时间】:2013-05-20 20:47:37
【问题描述】:

我有一个疑问,我无法解决问题。我想要做的是提出一份报告,其中包含专业(会计、商业等)的行,以及注册类型(注册、撤回等)的列,每个列都有计数。现在,这是我的查询。

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|    

【问题讨论】:

  • 你不能在没有聚合的情况下使用GROUP BY

标签: sql select group-by


【解决方案1】:

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

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

【讨论】:

  • 这真的很接近我想要的。有没有办法将前景状态名称视为列而不是行?
  • 我根据您为我编写的查询向问题中添加了一些数据。基本上我希望这些行说会计、代理、广告等。然后这些列将被接受/注册,计数是这两个字段的组合。与将它们全部垂直相比,它更容易阅读。我包括了计数,即使它们不是必需的。这些只是我现在从查询中得到的数字。
  • 它们代表两个字段的特定组合出现在表中的次数,这就是我要找的。我只希望 Enrolled/Accepted 字段成为列。我在尝试那个 SQL 时遇到了这个错误:不支持 PIVOT SQL 构造或语句。
  • 它在 SQL Fiddle 中完美运行,但在我的本地环境中却不行。 Number 字段实际上只是来自查询,它不是数据库本身的东西。
  • 能否提供FilteredContact 中的列名?只有你提供的那两个吗?
【解决方案2】:

您可以使用带有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

【讨论】:

    猜你喜欢
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    相关资源
    最近更新 更多