#sql-server
#sql-сервер
Вопрос:
Я немного устал от написания SQL-запросов, я пытаюсь вывести список «Контактов» без «PAS»
select a.first_name, a.last_name, (select count(b.contact_id)) as "PA Count"
from CRM_Contact a left join CRM_PA b on a.id = b.contact_id
where [PA Count] = 0
group by a.first_name, a.last_name
Кто-нибудь может объяснить, почему я получаю сообщение об ошибке:
Недопустимое имя столбца ‘PA Count’.
Комментарии:
1. Вы не можете ссылаться на агрегаты в
WHERE
, вам нужно использоватьHAVING
3. Что я должен сделать вместо этого, @Lamu?
Ответ №1:
Если вы хотите, COUNT
тогда просто используйте имя столбца без SELECT
инструкции и используйте HAVING
инструкцию после GROUP BY
:
select
a.first_name
, a.last_name
, Count(b.contact_id) as "PA Count"
from CRM_Contact a
left join CRM_PA b on a.id = b.contact_id
group by a.first_name, a.last_name
HAVING Count(b.contact_id) = 0
Ответ №2:
WHERE
можно использовать только столбцы или их псевдонимы. PA Count
though — это агрегированный показатель, который вычисляется после WHERE
.
Фильтрация агрегированных данных выполняется с помощью HAVING
предложения :
SELECT a.first_name,
a.last_name,
COUNT(b.contact_id) as [PA Count]
FROM CRM_Contact a
LEFT JOIN CRM_PA b ON a.id = b.contact_id
GROUP BY a.first_name,
a.last_name
HAVING Count(b.contact_id) =0
Ответ №3:
Вы забыли использовать From
в следующем запросе:
(select count(b.contact_id) from YourTable)
Комментарии:
1.
SELECT
безFROM
допустимый синтаксис; хотя это странно в используемом контексте. Это, например, вернет «ожидаемые» результаты.SELECT I, (SELECT N) N FROM (VALUES(1,2),(3,4))V(I,N);