SQL Server 如何在 HAVING 子句中使用 COUNT DISTINCT(*)?

Ger*_*tes 1 sql-server having

我有一个程序可以计算所有唯一的 [customerid] 值并将它们显示在 SELECT 列表中。我正在尝试使用 HAVING 子句对 [customerid] 进行排序,其中它只有“> 1”,但 SQL 不允许我在 HAVING 中使用 DISTINCT COUNT。在我看来,HAVING 应该与 COUNT 一起使用是有道理的,但它没有:

USE MyCompany;
GO
SELECT DISTINCT COUNT(customerid) AS NumberOfOrdersMade, customerid AS 
CustomerID
FROM tblItems_Ordered
GROUP BY customerid
HAVING DISTINCT COUNT(customerid) > 1
GO
Run Code Online (Sandbox Code Playgroud)

Kat*_*act 7

你可能想要SELECT COUNT(DISTINCT orderid)而不是DISTINCT COUNT(customerid)

USE MyCompany;
GO
SELECT COUNT(DISTINCT orderid) AS NumberOfOrdersMade, customerid AS
CustomerID
FROM tblItems_Ordered
GROUP BY customerid
HAVING COUNT(DISTINCT orderid) > 1
GO
Run Code Online (Sandbox Code Playgroud)

在 之外时COUNTDISTINCT将消除结果集中的重复行,这对您的查询没有影响,因为您正在执行GROUP BY. 在 , 中时COUNTDISTINCT会将计数限制为您传递给 count 函数的列的唯一值。因此,当您将其别名为 NumberOfOrdersMade 时,使用orderid列而不是 customerid更有意义。