Я думаю, что вы хотите посчитать, сколько id
s появляется только один раз в результатах вашего существующего запроса, другими словами, сколько id
s имеют только один отдельный NaicsCodeValue
.
Один из вариантов - использовать оконные функции:
select count(*)
from (
select
Id,
NaicsCodeValue,
max(...) max_emp,
count(*) over(partition by id) cnt
from ...
group by Id, NaicsCodeValue
) t
where cnt = 1
Если вы хотите, чтобы все строки из исходного запроса:
select *
from (
select
Id,
NaicsCodeValue,
max(...) max_emp,
count(*) over(partition by id) cnt
from ...
group by Id, NaicsCodeValue
) t
where cnt = 1
Если вы просто хотите подсчитать, это также можно записать путем агрегирования по id
и фильтрации по количеству различных NaicsCodeValue
:
select count(*)
from (
select 1
from ...
group by Id
having count(distinct NaicsCodeValue) = 1
) t
Это немного отличается от вашего исходного запроса, но выглядит для меня как более простой способ чтобы получить ожидаемый результат (, если Я правильно понял).