2012-05-03 5 views
0

두 개의 열이있는 Purchase이라는 테이블이 SQL Server 2008 R2에 있다고 가정 해보십시오. PurchaserExpenditure입니다. 이제그룹을 겹쳐서 정렬하려면 어떻게합니까?

Purchaser Expenditure 
--------- ----------- 
Alex   200 
Alex   300 
Alex   500 
Bob   300 
Bob   400 
Charlie  200 
Charlie  600 
Derek  100 
Derek  300 

내가이 쿼리를 가지고 :

Purchaser Expenditure SumExpenditure 
--------- ----------- -------------- 
Alex   200   200 
Alex   300   300 
Alex   500   500 
-------------------------------- 
Alex   NULL   1000 
-------------------------------- 
Bob   300   300 
Bob   400   400 
-------------------------------- 
Bob   NULL   700 
-------------------------------- 
Charlie  200   200 
Charlie  600   600 
-------------------------------- 
Charlie  NULL   800 
-------------------------------- 
Derek  100   100 
Derek  300   300 
-------------------------------- 
Derek  NULL   400 
-------------------------------- 

(선 : ​​SELECT Purchaser, Expenditure, SUM(Expenditure) AS SumExpenditure FROM Purchase GROUP BY Purchaser, Expenditure WITH ROLLUP

은 다음을 반환

의 테이블은 다음과 같은 행이 있다고 가정 해 봅시다 최대 금액을 강조하기 위해 추가됨)

01 즉

Purchaser Expenditure SumExpenditure 
--------- ----------- -------------- 
Derek  100   100 
Derek  300   300 
-------------------------------- 
Derek  NULL   400 
-------------------------------- 
Bob   300   300 
Bob   400   400 
-------------------------------- 
Bob   NULL   700 
-------------------------------- 
Charlie  200   200 
Charlie  600   600 
-------------------------------- 
Charlie  NULL   800 
-------------------------------- 
Alex   200   200 
Alex   300   300 
Alex   500   500 
-------------------------------- 
Alex   NULL   1000 
-------------------------------- 

, 내가 사용하여 그룹을 분류하고있다 : 내가 좋아하는 것이 무엇 23,516,

내가이 같은 결과 집합으로 끝낼 수 있도록 그룹화 된 금액으로 그룹을 분류 할 수있을 것이다 그룹 행에있는 400, 700, 8001000을 오름차순으로 정렬합니다.

누구나 어떤 결과가이 결과 집합을 반환 할 것이라고 제안 할 수 있습니까?

답변

0
;WITH x AS 
(
    SELECT Purchaser, Expenditure, s = SUM(Expenditure) 
    FROM dbo.Purchase 
    GROUP BY Purchaser, Expenditure WITH ROLLUP 
), 
y AS 
(
    SELECT Purchaser, s FROM x 
    WHERE Expenditure IS NULL 
    AND Purchaser IS NOT NULL 
), 
z AS 
(
    SELECT Purchaser, s, rn = ROW_NUMBER() OVER (ORDER BY s) 
    FROM y 
) 
SELECT x.Purchaser, x.Expenditure, x.s FROM x 
INNER JOIN z ON x.Purchaser = z.Purchaser 
ORDER BY z.rn, CASE WHEN z.s IS NULL THEN 2 ELSE 1 END; 
관련 문제