Это идеальное применение аналитических функций, в данном случае аналитической функции count(distinct ...)
. Во внутреннем запросе вы вычисляете, сколько разных отделов присутствует для каждого клиента; Запустите подзапрос, чтобы увидеть, что он производит. Затем внешний запрос просто выбирает строки, в которых число больше 1.
select customer_id, account_no -- , ... - whatever other columns you must select
from (
select *, count(distinct dept) over (partition by customer_id) as ct
from customers
)
where ct > 1
;
Примечание - если DEPT
может быть NULL
, эти строки не учитываются в count(distinct ...)
в любом случае. Если может присутствовать NULL
и требуется другая обработка, вам необходимо указать требование.