【问题标题】:SQL select with multiple counts from the same column从同一列中选择多个计数的 SQL
【发布时间】:2018-03-11 10:01:55
【问题描述】:

我在 SQL 中有一个包含以下列的表:状态、创建日期时间和案例类型

10 行数据的示例如下所示:

    Resolved-Withdrawn  2017-08-28 10:20:58.820 Termination Quote DE
    Pending-Customer    2017-08-28 10:44:37.987 Termination Quote DE
    Pending-Customer    2017-08-28 10:44:39.953 Termination Quote DE 
    Pending-Customer    2017-08-28 10:51:55.643 Termination Quote DE
    Pending-Customer    2017-08-28 10:51:56.513 Termination Quote DE
    Pending-Customer    2017-08-28 10:54:20.160 Termination Quote DE
    Pending-Customer    2017-08-28 10:54:20.747 Termination Quote DE
    Pending-Customer    2017-09-10 06:12:52.113 Termination Quote DE
    Pending-Customer    2017-09-15 12:34:32.657 Termination Quote DE

我想实现以下目标:

    Status               Total_August     Total_September
    -----------------------------------------------------
    Resolved-Withdrawn   1                0
    Pending-Customer     6                2

如何在 SQL 中创建此查询?

我最初的想法是这样的(这显然行不通),但也许它能让您更好地了解我作为非经验用户的思维过程。

    SELECT Status, COUNT(pxCreateDateTime) as Total_August, COUNT(pxCreateDateTime) as Total_September
    FROM ContractMgtWork
    WHERE  MONTH(pxCreateDateTime) = 8 and YEAR(pxCreateDateTime) = 2017 AND 
    CaseType = 'Amortization Schedule DE'
    GROUP BY Status 

【问题讨论】:

    标签: sql database select count


    【解决方案1】:

    count 与许多其他聚合函数一样,会跳过 nulls。您可以通过计算 case 表达式来利用此属性:

    SELECT   Status, 
             COUNT(CASE WHEN MONTH(pxCreateDateTime) = 8 THEN 1 END) AS Total_August,
             COUNT(CASE WHEN MONTH(pxCreateDateTime) = 9 THEN 1 END) AS Total_September
    FROM     ContractMgtWork
    WHERE    YEAR(pxCreateDateTime) = 2017 AND 
             CaseType = 'Amortization Schedule DE'
    GROUP BY Status 
    

    【讨论】:

      猜你喜欢
      • 2010-10-03
      • 2016-12-22
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      相关资源
      最近更新 更多