2 つのクエリの違いは、作成されるグループの数です。構文は、GROUPING SETS
指定された各グループ セットの UNION ALL と考えることができます。
たとえば、最初に作成したクエリを見てみましょう。
SELECT ProductId ,ProductName, SUM(Price) AS Price
FROM #Product Group By
GROUPING SETS((ProductId), (ProductName), ())
ここでは、次の 3 つのグループ化を指定しています。
- 製品番号
- 商品名
- 総計
このクエリは、次のコードを記述するのと同じです。
SELECT ProductID, NULL AS ProductName, SUM(Price) AS Price
FROM #Product
GROUP BY ProductID
UNION ALL
SELECT NULL, ProductName, SUM(Price)
FROM #Product
GROUP BY ProductName
UNION ALL
SELECT NULL, NULL, SUM(Price)
FROM #Product
同様に、2 番目のクエリを見てください。
SELECT ProductId ,ProductName, SUM(Price) AS Price
FROM #Product Group By
GROUPING SETS((ProductId, ProductName), ())
このクエリは、次の 2 つのグループ化を実行します。
- ProductID と ProductName
- 総計
これは、次の 2 つのグループ化を記述することと同じです。
SELECT ProductId ,ProductName, SUM(Price) AS Price
FROM #Product
GROUP BY ProductID, ProductName
UNION ALL
SELECT NULL, NULL, SUM(Price) AS Price
FROM #Product
一方を使用し、もう一方を使用しない理由については、どのグループ化が必要ですか? 製品 ID 別の合計、製品名別の合計、および総合計が必要ですか? 次に、最初のものを使用します。これは、例のように、製品が異なる製品 ID を持つ同じ名前を持つことができる場合に役立ちます。
製品 ID と製品名ごとの合計と総合計が必要ですか? 次に、2番目を使用します。