Недопустимое имя столбца в SQL-запросе

#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

2. Вредные привычки, от которых следует отказаться: использование псевдонимов таблиц, таких как (a, b, c) или (t1, t2, t3)

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);