2014-05-04 70 views
0

組我有以下表如何通過使用多個條件

Type SubType value 
A  1  1 
A  2  2 
A  3  3 
A  4  4 
B  1  1 
B  2  2 
B  3  3 
C  1  1 
C  2  2 
C  3  3 
C  4  4 

我的除了其中Type = A和輸出應該像下面

Type Sum 
A1 1 
A2 2 
A3 3 
A4 4 
B  6 
C  10 

所有行希望集團是否有可能在一種情況下按幾行進行分組,而在另一種情況下進行分組?

回答

3

是的,你必須編寫創建組定義的表達式:

Select case When Type = 'A' then type + ltrim(str(subtype, 9)) 
      Else Type End Type, Sum(Value) Sum 
From table 
Group By case When Type = 'A' then type + ltrim(str(subtype, 9)) 
      Else Type End 
2

是的,你可以GROUP BY一個CASE表達;

SELECT CASE WHEN type='A' 
      THEN type+CAST(subtype AS VARCHAR(MAX)) 
      ELSE type END [Type], 
     SUM(value) [Sum] 
FROM mytable 
GROUP BY CASE WHEN type='A' 
       THEN type+CAST(subtype AS VARCHAR(MAX)) 
       ELSE type END 
ORDER BY [Type] 

An SQLfiddle to test with

在SQL Server 2012中,您可以使用CONCAT而無需強制轉換,這簡化了查詢。

1

另一種選擇。拆分邏輯到兩種情況:

SELECT Type + CAST(subtype AS VARCHAR(MAX)) AS Type, 
     SUM(Value) AS Sum 
FROM mytable 
WHERE Type = 'A' 
GROUP BY Type, Subtype 

UNION ALL 

SELECT Type, 
     SUM(Value) 
FROM mytable 
WHERE Type <> 'A' 
GROUP BY Type 

ORDER BY Type ; 

測試在SQL-Fiddle(日Thnx到@Joachim Isakkson