1
CREATE TABLE #Product (ProductId INT, ProductName Varchar(500), Price MONEY)
INSERT INTO #Product (ProductId ,ProductName,Price)
VALUES(1, 'Test1', 12000),
   (2, 'Test2', 18000),
   (3, 'Test3', 25000),
   (4, 'Test4', 15000),
   (1, 'Test4', 15000)

SELECT ProductId ,ProductName, SUM(Price) AS Price
FROM #Product Group By
GROUPING SETS((ProductId), (ProductName), ())

SELECT ProductId ,ProductName, SUM(Price) AS Price
FROM #Product Group By
GROUPING SETS((ProductId, ProductName), ())

この2つはどのような違いがありますか?そして、最初と2番目をどこで使用するか

4

2 に答える 2

1

以下のリンクを確認してください。グループ化セットの非常にわかりやすい説明です。

グループ化セットの説明

于 2013-03-28T07:39:24.123 に答える
1

2 つのクエリの違いは、作成されるグループの数です。構文は、GROUPING SETS指定された各グループ セットの UNION ALL と考えることができます。

たとえば、最初に作成したクエリを見てみましょう。

SELECT ProductId ,ProductName, SUM(Price) AS Price
FROM #Product Group By
GROUPING SETS((ProductId), (ProductName), ())

ここでは、次の 3 つのグループ化を指定しています。

  1. 製品番号
  2. 商品名
  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 つのグループ化を実行します。

  1. ProductID と ProductName
  2. 総計

これは、次の 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番目を使用します。

于 2014-06-24T20:58:40.467 に答える