2013-05-10 63 views
2

这基本上是我试图实现的;在WHERE子句中有COUNT还是HAVING?

SELECT 
COUNT(DISTINCT No) 
FROM 
Table 
WHERE 
(Type = 1 AND COUNT(DISTINCT No) > Num) 
OR (Type = 2 AND COUNT(DISTINCT No) > Num) 
GROUP BY 
Week 

什么是最好的方法来实现这一目标?

感谢

回答

2

任何骨料比较需要进入集团后,通过HAVING子句。请记住,根据放置非聚合条件的位置,您可能会得到不同的结果,因为您将通过WHERE包含/排除的内容进行聚合。

SELECT COUNT(DISTINCT No) 
FROM Table 
WHERE Type = 1 
GROUP BY Week 
HAVING COUNT(DISTINCT No) > Num 

可以从

SELECT COUNT(DISTINCT No) 
FROM Table 
GROUP BY Week 
HAVING COUNT(DISTINCT No) > Num 
AND Type = 1 
+0

感谢您的回答。我收到一条错误消息,指出由于不包含在聚合中,所以Type在Having子句中是无效的......我是否需要将它添加到组中? – DtotheG 2013-05-10 09:06:36

+0

哎呀,这是一个很好的观点。后者的声明将不起作用,因为类型不被分组或不是聚合。 – ludwigmace 2013-05-10 09:29:43

0

使用此:

SELECT 
COUNT(DISTINCT No) as num1 
FROM TableName 
WHERE Type IN (1,2) 
GROUP BY Week 
HAVING num1 > Num 
0
SELECT Week, Type, COUNT(DISTINCT No) WeekTally 
    FROM [Table] 
    WHERE Type in (1,2) 
GROUP BY Week, Type 
    HAVING COUNT(DISTINCT No) > @Num 
ORDER BY Week, Type; 

如果你按周分组是不同的,你一定要看到这一周的计数是?