我试图找出某个项目在表中存在多少行,例如在下面的 itemID 1 示例中,我需要结果 5(不是 3,这是我目前得到的)。我很想将 TransactionID 添加到 PARTITION BY 子句中,但这会导致 Msg 8120,因为查询没有按 TransactionID 进行 GROUP。好吧,如果确实如此,那么获得该计数将很容易,但我不想在事务级别上进行分组。我该怎么做才能使 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;