2017-08-09 65 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的規則衝突,請將其換行放在方括號中。