2017-08-09 39 views
0

我有一个看起来像这样如何组总结与CASE列在SELECT

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 

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

+0

您遇到了操作顺序问题。 FROM GROUP BY,然后运行SELECT。在执行group by时,别名'type'不在范围内。 [type]中分组的值是数据库中的类型值;而不是你的案例重新评估的那些。然后选择运行并且案例评估G&A和OH为非旅行;所以你认为引擎没有正确分组。 – xQbert

回答

3

使用你在你的group by使用您的select以及表达:

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的规则冲突,请将其换行放在方括号中。