2016-03-01 71 views
0

使用下面的代碼:SQL:SUM的MAX各組

SELECT [Section] 
      ,[Subgroup] 
      ,[ID] 
      ,SUM([Amount]) AS [SUM] 
    FROM Table 
    GROUP BY [Section], [Subgroup], [ID] 
    ORDER BY [Amount] DESC,[Section] 

我是能夠產生如下:

Section Subgroup ID SUM 
A G 1 56787 
A G 2 45687 
C W 3 36746 
C W 4 27456 
C W 5 13546 
C G 6 9345 
C T 7 8535 
A G 8 8435 
C T 9 7245 
A G 11 7243 
B T 10 6245 
B T 12 5768 
C T 13 4676 
A G 14 3564 
A G 16 3465 
C T 15 2576 
B T 17 2478 
A S 18 1856 
C W 19 1567 
B T 20 1244 
A C 22 1146 
C T 21 1056 
C T 23 945 
C T 24 933 
B G 27 845 
C G 25 834 
A A 26 779 
B T 28 742 
C C 29 734 
B G 31 689 
C T 30 623 
A S 33 587 
A S 34 565 
A E 32 489 
B T 35 478 
C G 37 378 
B T 39 256 

但我想是每個最高總和小組中的每個部分:

Section Subgroup ID SUM 
A G 1 56787 
A S 18 1856 
A C 22 1146 
A A 26 779 
A E 32 489 
B T 10 6245 
B G 27 845 
C W 3 36746 
C G 6 9345 
C T 7 8535 
C C 29 734 

我嘗試使用「過度」和「PARTITION BY」,但不能讓他們的工作。我也看着'RANK'。我錯過了什麼?

謝謝。

+0

難道是可以接受的包裹你的第一個查詢的結果在一個子查詢或CTE,然後做一個查詢? – Anssssss

+0

您確定要在「GROUP BY」中包含「ID」嗎? –

+0

是的,我在這種情況下。 – Cinji18

回答

1

試試這個:

SELECT [Section], [Subgroup], [ID], [SUM] 
FROM (  
    SELECT [Section], [Subgroup], [ID], SUM([Amount]) AS [SUM], 
      ROW_NUMBER() OVER (PARTITION BY [Section], [Subgroup] 
          ORDER BY SUM([Amount]) DESC) As rn 
    FROM Table 
    GROUP BY [Section], [Subgroup], [ID]) AS t 
WHERE t.rn = 1 
ORDER BY [Section], [Subgroup] 
+0

是的,謝謝。現在我要去某個地方。 – Cinji18