次の方法で共有


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 操作では、ItemColor の両方の値の考えられる組み合わせから結果セットの行が生成されます。たとえば、CUBE 操作では、Item 列の値 ChairColor 列の値 (RedBlue、および Red + Blue) で考えられるすべての組み合わせの集計だけではなく、Color 列の値 RedItem 列の値 (ChairTable、および 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 を使用したデータの集約

その他の技術情報

SELECT (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手