0

SQL Server 2008 R2に、Purchaseとの2つの列で呼び出されるテーブルがあるPurchaserと しますExpenditure

テーブルに次の行があるとします。

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

今、私はこのクエリを持っています:

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

これにより、次が返されます。

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
--------------------------------

(ロールアップされた金額を強調するために行が追加されました。)

私が望むのは、グループ化された金額でグループをソートできるようにして、最終的に次のような結果セットになるようにすることです。

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
--------------------------------

つまり、、、を使用してグループを並べ替え、400グループ行700を昇順で並べ替えています。8001000

誰かがこの結果セットを返すクエリを提案できますか?

4

1 に答える 1

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;
于 2012-05-04T03:21:31.527 に答える