Совокупная ошибка функции в SQL Server 2008 R2

Я хочу получить empId это принадлежит более чем одному городу. Поэтому я использую этот запрос:

select empId 
from phone 
group by city 
having  count(city) > 1

но я получаю ошибку:

Msg 8120, уровень 16, состояние 1, строка 1
Столбец phone.empId недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

3 ответа

Решение

Использование GROUP BY а также HAVING Посчитайте отдельный город, чтобы найти empId с более чем 1 городом:

SELECT empId
FROM phone
GROUP BY empId
HAVING COUNT(DISTINCT city) > 1

Вы можете использовать ROW_NUMBER() также для его работы:
следующий код должен работать:

select empId from 
(
select distinct empId,city,ROW_NUMBER() over(partition by empId order by city) rn
 from phone 
 ) a
 where rn>1

Эта ошибка говорит о том, что если вы собираетесь использовать предложение GROUP BY, то в своем операторе SELECT вы можете только "выбрать" столбец, по которому вы группируете, и использовать агрегатные функции для этого столбца, потому что другие столбцы не появятся в итоговой таблице.

Другие вопросы по тегам