![](/img/trans.png)
[英]How do I include another column without having to place it in the GROUP BY Clause? [SQL Server 2005]
[英]How to use column selection in Having Clause but not in Group By Clause in SQL Server
我一直碰到这个问题,我知道必须有一个简单的解决方案,但我找不到。
我想获取某些日期之间每个零件的序列号。 因此,没有选择日期,它看起来像这样。
SELECT
Part_Name,
COUNT(DISTINCT Serial_No) AS 'Serial Frequency'
FROM Inventory
GROUP BY Part_Name
我得到每个零件的序列号。
part1 55
part2 32
part3 48
etc etc
因此,现在我希望在两个日期之间进行选择。 我知道我需要使用“ Having”,但是这迫使我将其逐个添加到组中,然后它不再为我提供总数,而是为每个部分单独计数。 IE浏览器
SELECT
Part_Name,
COUNT(DISTINCT Serial_No) AS 'Serial Frequency'
FROM Inventory
GROUP BY Part_Name, Grade_Date
HAVING Grade_Date > '2016-06-01' AND Grade_Date < '2016-07-01'
输出:
part1 1
part1 1
part1 1
part2 1
part2 1
etc etc
我在这里错过了什么明显的事情,因为可以做到这一点? 如果我不包括它,则会出现此错误
HAVING子句中的“ Inventory.Grade_Date”列无效,因为它既不在聚合函数中也不在GROUP BY子句中。
使用where
子句,因为您是在比较实际值而不是汇总值。
SELECT
Part_Name,
Grade_Date,
COUNT(DISTINCT Serial_No) AS 'Serial Frequency'
FROM Inventory
WHERE Grade_Date > '2016-06-01' AND Grade_Date < '2016-07-01'
GROUP BY Part_Name,Grade_Date
您希望在进行聚合之前按Grade_Date
进行过滤,并且您不应该在GROUP BY
或SELECT
包括Grade_Date
:
SELECT Part_Name, COUNT(DISTINCT Serial_No) AS SerialFrequency
FROM Inventory
WHERE Grade_Date > '2016-06-01' AND Grade_Date < '2016-07-01'
GROUP BY Part_Name;
评论:
>=
。 DISTINCT
,则将其删除。 DISTINCT
会产生额外的计算开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.