我在SQL Server 2012中有交易数据表,例如:
Month Type
----- -----
1 Paper
1 Paper
1 Mobile
2 Mobile
3 Paper
3 Mobile
如果我按月分组,我可以轻松计算交易的发生次数:
SELECT Month, Count(*)
FROM Transaction
GROUP BY Month
如果我按月分组并输入:
SELECT Month, Type, Count(Type) AS RowCount
FROM Transaction
GROUP BY Month,Type
我可以分解结果并获得每种类型的计数。但是,结果显示在不同的行中:
Month Type RowCount
------ ----- ---------
1 Paper 2
1 Mobile 1
2 Mobile 1
3 Paper 1
3 Mobile 1
现在我真正需要的是知道是否可以通过一个查询生成以下结果:
Month Paper Mobile
------- ------- --------
1 2 1
2 0 1
3 1 1
有什么想法吗?
答案 0 :(得分:2)
SELECT month,
SUM(CASE WHEN Type='Paper' THEN 1 ELSE 0 END) as Paper,
SUM(CASE WHEN Type='Mobile' THEN 1 ELSE 0 END) as Mobile
FROM t
GROUP BY month
答案 1 :(得分:1)
是的,您可以使用CASE语句和SUM来执行此操作:
Select
Month,
Sum(Case When Type = 'Paper' Then 1 Else 0 End) As Paper,
Sum(Case When Type = 'Mobile' Then 1 Else 0 End) As Mobile
From [transaction]
Group By Month
由于您使用的是SQL Server 2012,因此可以使用IIF语句使代码更紧凑:
SELECT
Month,
SUM(IIF(TYPE='Paper',1,0)) AS Paper,
SUM(IIF(TYPE='Mobile',1,0)) AS Mobile
FROM [Transaction]
GROUP BY Month
请注意,事务是您需要放在括号中的关键字。
如果您有更多类型,可以使用动态SQL为所有类型生成正确的代码。