我使用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
其中:
总数表示唯一月 - 月对的总条目金额。
Lost表示唯一的月份 - 年份对的总条目金额,状态为“已完成”或“已取消”
赢取是指具有状态“赢”的唯一月 - 月对的总条目金额。
我知道如何获得唯一月份年份的总金额,但不知道如何在结果集中添加Lost和Won列并获取条目金额。当然,如果没有任何“赢”项目的月 - 月对,只有'失去',它应该是赢得列的0值。
答案 0 :(得分:8)
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将忽略此