2013-05-10 5 views
2

Это в основном то, чего я пытаюсь достичь;COUNT внутри предложения WHERE?

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 недействителен в предложении Have, потому что он не содержится в совокупности ... Нужно ли добавлять его в группу? – DtotheG

+0

Ой, это хороший момент. Последний оператор не будет работать, поскольку тип не сгруппирован или не является агрегированным. – ludwigmace

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; 

Если вы группировки по неделе, конечно, вы хотите увидеть какой недели счетчик для ?!

Смежные вопросы