テーブルに特定のアイテムの行がいくつあるかを調べようとしています。たとえば、itemID 1 の次の例では、結果 5 が必要です (現在取得している 3 ではありません)。TransactionID を PARTITION BY 句に追加したいと思っていますが、クエリが TransactionID でグループ化されないため、メッセージ 8120 が返されます。そうであれば、その数を取得するのは簡単ですが、トランザクション レベルでグループ化したくありません。そのItemCountを正しく取得するにはどうすればよいですか? とても簡単なはずですが、頭をぶつけています。
DECLARE @t TABLE (TransactionID INT PRIMARY KEY IDENTITY, CustomerID INT, ItemID INT);
INSERT INTO @t (CustomerID, ItemID)
VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 2),
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(1, 1);
SELECT
CustomerID,
ItemID,
Rows = COUNT(*),
ItemRowCount = COUNT(*) OVER (PARTITION BY ItemID)
FROM
@t
GROUP BY
CustomerID,
ItemID
ORDER BY
ItemID,
CustomerID;
編集:私は集計しすぎていたと思います。Sebastian Meine が私をトラックに乗せてくれました。彼の答えは正しいので、私はそれを受け入れました。ただし、このサブクエリは次の場合に機能します。
SELECT
CustomerID,
ItemID,
Rows = COUNT(*),
ItemRowCount = (SELECT COUNT(*) FROM @t x WHERE t.ItemID = x.ItemID)
FROM
@t t
GROUP BY
CustomerID,
ItemID
ORDER BY
ItemID,
CustomerID;