В запросе с listagg()
я пытаюсь добавить предложение для split_rep: существование user_id
с profile_type='Split'
и для multi_rep: существование user_id
с более чем одним ap.id
.
Упрощенный запрос (где - это то, что я пытаюсь сделать):
select distinct r.user_id,
listagg(distinct ap.rep_code, ', ') within group (order by ap.bill_rate) as rep_code_list
--,case when max(ap.profile_type) over (partition by r.user_id)='Split' then 1 else 0 end has_split_rep_code
--,case when count(ap.id) over (partition by r.user_id)>1 then 1 else 0 end has_multi_rep_code
from representatives r
join profiles ap on r.user_id=ap.user_id
group by r.user_id
Это выдает ошибку, что profile_type
и id
должны быть в group by
- однако, если добавлено, это даст неправильный вывод. Не уверен, почему оконная функция не поддерживается с listagg, но есть идеи, как это обойти?
Пример данных:
user_id id profile_type rep_code
A A Self AAA
A B Self AAB
B C Self AAC
C D Self AAD
C E Split AAE
D F Split AAF
Желаемый вывод:
user_id rep_code split_rep_code multi_rep_code
A AAA, AAB 0 1
B AAC 0 0
C AAD, AAE 1 1
D AAF 1 0