如何在SELECT中将带有CASE的求和列分组

时间:2017-08-09 17:54:09

标签: sql-server tsql group-by sum

我的数据看起来像这样

Value | Type
----- | ------
100   | Travel
200   | G&A
100   | OH
300   | Travel

我想这样总结一下:

TotalValue | Type
---------- | ------
400        | Travel
300        | Non-Travel

我写了一个这样的查询:

SELECT 
    SUM([Value]) as 'TotalValue',
    CASE [Type] WHEN 'Travel' THEN [Type] ELSE 'Non-Travel' END AS 'Type'
FROM 
    #tableName
GROUP BY 
    [Type]

然而结果就是这样:

TotalValue | Type
---------- | ------
400        | Travel
200        | Non-Travel
100        | Non-Travel

我该如何解决这个问题?在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

使用select group by中正在使用的表达式:

SELECT 
    SUM([Value]) as TotalValue,
    CASE [Type] WHEN 'Travel' THEN [Type] ELSE 'Non-Travel' END AS Type
FROM 
    #tableName
GROUP BY 
    CASE [Type] WHEN 'Travel' THEN [Type] ELSE 'Non-Travel' END 

rextester演示:http://rextester.com/YRN27346

返回:

+------------+------------+
| TotalValue |    Type    |
+------------+------------+
|        300 | Non-Travel |
|        400 | Travel     |
+------------+------------+

注意:您不应该在别名名称周围使用单引号,即字符串文字。如果您的别名与Database Identifiers 的规则冲突,则将它们包装在方括号中。