Вам следует использовать оконную функцию, если вы хотите получить все местоположения всех клиентов с более чем одним местоположением:
SELECT t.CU_NO, t.LOC_NO, t.NUMBEROCC
FROM (
SELECT CU_NO, LOC_NO, COUNT(LOC_NO) OVER (PARTITION BY CU_NO) AS NUMBEROCC
FROM MYTABLE
) AS t
WHERE t.NUMBEROCC > 1
Если вас интересуют не все местоположения, а только идентификаторы клиентов, вы можете использовать простую группу по предложению:
SELECT CU_NO
FROM MYTABLE
GROUP BY CU_NO
HAVING COUNT(DISTINCT LOC_NO) > 1
Но в обоих случаях вы хотите группировать по CU_NO, а не по LOC_NO!
Реализация оконных функций на SQL-сервере (пока!) Не включена COUNT(DISTINCT x) OVER(PARTITION BY x)
. Итак, это вызывает ошибку:
SELECT t.CU_NO, t.LOC_NO, t.NUMBEROCC
FROM (
SELECT CU_NO, LOC_NO
, COUNT(DISTINCT LOC_NO) OVER (PARTITION BY CU_NO) AS NUMBEROCC
FROM MYTABLE
) AS t
WHERE t.NUMBEROCC > 1
Обходной путь должен использовать DENSE_RANK() OVER()
и MAX() OVER()
с одним дополнительным уровнем запроса:
SELECT x.CU_NO, x.LOC_NO, x.NUMBEROCC
FROM (
SELECT t.CU_NO, t.LOC_NO
, MAX(DR) OVER(PARTITION BY CU_NO) AS NUMBEROCC
FROM (
SELECT CU_NO, LOC_NO
, DENSE_RANK() OVER (PARTITION BY CU_NO ORDER BY LOC_NO) AS DR
FROM MYTABLE
) AS t
) AS x
WHERE x.NUMBEROCC > 1