ROLLUP を使用したデータの集約
ROLLUP 操作は、小計と総計を含むレポートの生成に使用すると便利です。ROLLUP 操作では、CUBE 操作で生成される結果セットと類似した結果セットが生成されます。詳細については、「CUBE を使用したデータの要約」を参照してください。
CUBE 操作と ROLLUP 操作の結果セットの相違点は次のとおりです。
- CUBE 操作では、選択した列の値のすべての組み合わせの集計を示す結果セットが生成されます。
- ROLLUP 操作では、選択した列の値の階層の集計を示す結果セットが生成されます。
たとえば、Inventory という単純なテーブルに次のエントリが格納されているとします。
Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210
次のクエリでは、小計レポートが生成されます。
SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
ELSE ISNULL(Item, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
ELSE ISNULL(Color, 'UNKNOWN')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP
Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00
(7 row(s) affected)
このクエリのキーワードを ROLLUP
から CUBE
に変更すると、生成される CUBE
操作の結果セットは、上記のレポートの末尾に次の 2 行が追加されたものになります。
ALL Blue 225.00
ALL Red 433.00
CUBE
操作では、Item
と Color
の両方の値の考えられる組み合わせから結果セットの行が生成されます。たとえば、CUBE
操作では、Item
列の値 Chair
と Color
列の値 (Red
、Blue
、および Red
+ Blue
) で考えられるすべての組み合わせの集計だけではなく、Color
列の値 Red
と Item
列の値 (Chair
、Table
、および Chair
+ Table
) で考えられるすべての組み合わせの集計も示されています。
ROLLUP
操作では、GROUP BY
句の右側に指定された列の各値に対して、左側に指定された列の値で考えられるすべての組み合わせの集計が示されるわけではありません。たとえば、ROLLUP
操作では、各 Color
値に対して考えられるすべての Item
値の組み合わせが表示されることはありません。
ROLLUP 操作の結果セットには、COMPUTE BY によって返される結果セットと同様の機能があります。ただし、ROLLUP 操作には次のような利点があります。
- ROLLUP 操作では 1 つの結果セットが返されますが、COMPUTE BY では複数の結果セットが返されるため、アプリケーション コードがより複雑になります。
- ROLLUP 操作はサーバー カーソルで使用できますが、COMPUTE BY はサーバー カーソルでは使用できません。
- クエリ オプティマイザでは、ROLLUP 操作に対して、COMPUTE BY よりも効率的な実行プランを生成できる場合があります。
参照
概念
COMPUTE および COMPUTE BY を使用したデータの集約