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

Sql server SQL Server如何在HAVING子句中使用COUNT DISTINCT(*)?,sql-server,having,Sql Server,Having,我有一个计算所有唯一[customerid]值并将其显示在选择列表中的过程。我试图通过使用HAVING子句对[customerid]进行排序,其中它仅大于1,但SQL不允许我在HAVING子句中使用DISTINCT计数。在我看来,HAVE应该与伯爵一起工作是有道理的,但事实并非如此: USE MyCompany; GO SELECT DISTINCT COUNT(customerid) AS NumberOfOrdersMade, customerid AS CustomerID FROM t

我有一个计算所有唯一[customerid]值并将其显示在选择列表中的过程。我试图通过使用HAVING子句对[customerid]进行排序,其中它仅大于1,但SQL不允许我在HAVING子句中使用DISTINCT计数。在我看来,HAVE应该与伯爵一起工作是有道理的,但事实并非如此:

USE MyCompany;
GO
SELECT DISTINCT COUNT(customerid) AS NumberOfOrdersMade, customerid AS 
CustomerID
FROM tblItems_Ordered
GROUP BY customerid
HAVING DISTINCT COUNT(customerid) > 1
GO
您可能希望选择COUNTDISTINCT orderid而不是DISTINCT COUNTcustomerid:

当超出计数范围时,DISTINCT将从结果集中消除重复行,这在查询中不会产生任何影响,因为您正在执行GROUP BY。在计数内时,DISTINCT将计数限制为传递给COUNT函数的列的唯一值。因此,当您将orderid列别名为NumberOfOrdersMade时,使用orderid列而不是customerid更有意义。

您可能希望选择COUNTDISTINCT orderid而不是DISTINCT COUNTcustomerid:


当超出计数范围时,DISTINCT将从结果集中消除重复行,这在查询中不会产生任何影响,因为您正在执行GROUP BY。在计数内时,DISTINCT将计数限制为传递给COUNT函数的列的唯一值。因此,当您将orderid列别名为NumberOfOrdersMade时,使用orderid列而不是customerid更有意义。

MySQL和SQL Server是两种不同的东西;它们不是同义词。只使用与您的问题相关的标签,不要随意添加其他包含熟悉单词或听起来类似的标签。如果不确定标记是否适用,请阅读标记说明。如果你仍然不确定,不要使用它;如果需要添加,这里会有人为您添加。这里的标记具有相关性和特定含义。谢谢。哦,谢谢你,编辑。我是新来的,所以我不能完全确定,谢谢你的提醒。MySQL和SQL Server是两个不同的东西;它们不是同义词。只使用与您的问题相关的标签,不要随意添加其他包含熟悉单词或听起来类似的标签。如果不确定标记是否适用,请阅读标记说明。如果你仍然不确定,不要使用它;如果需要添加,这里会有人为您添加。这里的标记具有相关性和特定含义。谢谢。哦,谢谢你,编辑。我是新来的,所以我不能完全确定,谢谢你的提醒。谢谢你的帮助,我在阅读了你关于计数和区别的内容后重新考虑了我的代码,我不能使用orderid,因为表中列出了每个订单的多个customerid,例如,如果customerid 2234下了3个订单,那么customerid列将有3个2234值。然后,它会列出他们的订单、订单日期和价格。我最后做的只是使用customerid的计数,并将其放在customerid列旁边。这让我得到了显示每个customerid存在多少customerid的理想结果;选择COUNTcustomerid作为Number of OrdersMade,customerid作为customerid,SUMprice作为SumPriceOfOrders根据customerid从tblItems_Ordered GROUP制作忘记了HAVING'HAVING COUNTcustomerid>1 HAVING COUNT*>1应该足够了。感谢您的帮助,在阅读了您关于计数和DISTINCT的内容后,我重新考虑了我的代码,我不能使用orderid,因为表中列出了每个订单的多个customerid,例如,如果customerid 2234下了3个订单,那么列customerid将有3个2234值。然后,它会列出他们的订单、订单日期和价格。我最后做的只是使用customerid的计数,并将其放在customerid列旁边。这让我得到了显示每个customerid存在多少customerid的理想结果;转到选择COUNTcustomerid作为订单编号,customerid作为customerid,SUMprice作为SumPriceOfOrders根据customerid从tblItems_Ordered GROUP制作的订单,忘记了“HAVING COUNTcustomerid>1 HAVING COUNT*>1应该足够了。
USE MyCompany;
GO
SELECT COUNT(DISTINCT orderid) AS NumberOfOrdersMade, customerid AS
CustomerID
FROM tblItems_Ordered
GROUP BY customerid
HAVING COUNT(DISTINCT orderid) > 1
GO