【问题标题】:Total Count of each每个的总计数
【发布时间】:2017-04-12 06:18:29
【问题描述】:

我的 SQL Server 查询有问题。

我的查询必须显示每个类别的总数。不是所有类别的总数。

SELECT [CATEGORY],
       (SELECT COUNT(*)  
        FROM [Group_New_DB].[dbo].[INCIDENTSM1] 
        WHERE ([OPEN_TIME] >=  @StartDate and [OPEN_TIME] < @EndDate + 1) ) AS OpenedCount, 
       (SELECT COUNT(*)  
        FROM [Group_New_DB].[dbo].[INCIDENTSM1]
        WHERE ([CLOSE_TIME] >=  @StartDate and [CLOSE_TIME] < @EndDate + 1)) AS ClosedCount   
FROM [Group_New_DB].[dbo].[INCIDENTSM1] 
GROUP BY CATEGORY 
ORDER BY CATEGORY

该报告由一个包含 3 列的表格组成:类别、已注册、已关闭。
1 列是类别名称。
第 2 列是注册了多少个类别。
3 列 -> 关闭了多少列。
但是结果

结果结果看起来不正确。

【问题讨论】:

标签: sql sql-server select count


【解决方案1】:

我不太明白总数与总数之间的区别是什么,因为问题没有提供任何上下文。

虽然,如果您尝试获取已命名列的 OpenedCount 和 ClosedCount,我建议您尝试以下操作:

SELECT
    CATEGORY,
    SUM(CASE WHEN (OPEN_TIME >= @start_date AND OPEN_TIME < @end_date+1) 
        THEN 1 
        ELSE 0
    END) AS OPENED_COUNT,
    SUM(CASE WHEN (CLOSED_TIME >= @start_date AND CLOSED_TIME < @end_date+1) 
        THEN 1 
        ELSE 0
    END) AS CLOSED_COUNT
FROM
    [Group_New_DB].[dbo].[INCIDENTSM1]
GROUP BY
    CATEGORY
ORDER BY
    CATEGORY

IMO,这也是一种更好的方法,因为它不包含多个子查询。

更正:按照 TriV 的建议将 COUNT 更改为 SUM - 谢谢!

【讨论】:

    【解决方案2】:

    试试这个 -

    SELECT [CATEGORY],
    COUNT(CASE WHEN [OPEN_TIME] >=  @StartDate and [OPEN_TIME] < @EndDate + 1 THEN 1 ELSE NULL END) AS OpenedCount, 
    COUNT(CASE WHEN [CLOSE_TIME] >=  @StartDate and [CLOSE_TIME] < @EndDate + 1 THEN 1 ELSE NULL END) AS ClosedCount   
    FROM [Group_New_DB].[dbo].[INCIDENTSM1] GROUP BY
    CATEGORY ORDER BY CATEGORY
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-13
      • 2016-11-16
      • 1970-01-01
      • 2019-05-03
      • 2023-03-15
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      相关资源
      最近更新 更多