【问题标题】:Count for groups and sub-groups计算组和子组
【发布时间】:2011-12-06 13:16:19
【问题描述】:

我使用 SQL Server 2008。有一个包含项目、状态和日期的表格:

ID    Status      Date
1     Gone        21-10-2011
2     Cancelled   01-10-2011
3     Won         02-10-2011
4     Won         07-10-2011
5     Gone        02-01-2010
6     Won         24-01-2010

出于统计目的,我需要一些 T-SQL 查询,结果将返回如下表:

Month    Year    Total    Lost   Won
10       2011    4        2      2
01       2010    2        1      1   

地点:

Total 是指唯一月-年对的总条目数。

丢失是指状态为“已取消”或“已取消”的唯一月-年对的总条目数

Won 是指状态为“Won”的唯一月-年对的总参赛金额。

我了解如何获取唯一月份-年份的总金额,但不知道如何添加结果集的“输赢”列并获取条目金额。当然,如果月-年对没有任何“获胜”项目,只有“失败”,则获胜列的值应为 0。

【问题讨论】:

    标签: sql sql-server tsql count group-by


    【解决方案1】:
    SELECT
       MONTH([Date]) [Month],
       YEAR([Date]) [Year],
       COUNT(*) [Total],
       COUNT(CASE WHEN Status IN ('Gone', 'Cancelled') THEN 1 END) [Lost],
       COUNT(CASE WHEN Status= 'Won' THEN 1 END) [Won]
    FROM
       MyTable
    GROUP BY
       MONTH([Date]),
       YEAR([Date])
    

    这是可行的,因为 CASE 中的静默 ELSE 给出了 NULL,而 COUNT 将忽略它

    【讨论】:

    • 答案已编辑,因为您错过了列名和“丢失”状态限制。
    • 那么“消失”的限制呢?奇怪的是,样本数据没有显示“丢失”状态
    • 我印象深刻。提问 3 分钟后,我得到了很好的答案。非常感谢。
    • @gbn;都好。 @sunprophit:提供格式正确的问题,并附上要解决的正确细节;得到一个好的答案:D
    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多