Как дополнить case уникальным значением
Нужно в sum(case when p.otv_kon in ('34001') THEN 1 END) f22 добавить условие COUNT(DISTINCT p.date_input), т.е. что-то подобное
sum(case when p.otv_kon in ('34001') and p.date_input(Уникальные) THEN 1 END) f22
где p.date_input формат DATE,
и аналогично
sum(case when p.otv_kon in ('34001') THEN 1 END) f23 добавить условие COUNT(DISTINCT p.username)
где p.username формат VARCHAR
также, подобное
sum(case when p.otv_kon in ('34001') and p.username(Уникальные) THEN 1 END) f23
Запрос
select
--w.mo f1,
nvl (w.mo, (select mo from t_mo t where t.mo_id=1)) f1,
''f2,
'0'f3,
' 'f4,
sum(case when t.regname=p.username or t.regname!=p.username THEN 1 END) f5,
sum(case when t.regname=p.username THEN 1 END) f6,
sum(case when t.regname!=p.username THEN 1 END) f7,
sum(case when p.cause_id IN (22,1) THEN 1 END) f8,
sum(case when cause_id in (24,23,25,3,2,4) THEN 1 END) f9,
sum(case when cause_id in (26,5) THEN 1 END) f10,
sum(case when cause_id in (27,6) THEN 1 END) f11,
sum(case when cause_id in (28,8) THEN 1 END) f12,
sum(case when cause_id in (29,9,32,36) THEN 1 END) f13,
sum(case when cause_id in (30,10) THEN 1 END) f14,
sum(case when cause_id in (31,11) THEN 1 END) f15,
sum(case when cause_id in (33,13) THEN 1 END) f16,
sum(case when cause_id in (34,35,7,15,12,14) THEN 1 END) f17,
sum(case when p.otv_kon in ('34001') THEN 1 END) f18,
sum(case when p.otv_kon in ('34002') THEN 1 END) f19,
sum(case when p.otv_kon in ('34004') THEN 1 END) f20,
sum(case when p.otv_kon in ('34') THEN 1 END) f21,
--new
sum(case when p.otv_kon in ('34001') THEN 1 END) f22,
sum(case when p.otv_kon in ('34001') THEN 1 END) f23
from t_block_ger t, t_petit p, t_mo w WHERE t.id_ger=p.id
AND p.mo_id=w.mo_id
AND p.conect_id=5
AND to_date(t.date_end) BETWEEN '01.01.2022' AND '01.05.2022'
group by w.mo
--order by f1
union all
select
''f1,
''f2,
'0'f3,
' 'f4,
count(case when t.regname=p.username or t.regname!=p.username THEN 1 END) f5,
count(case when t.regname=p.username THEN 1 END) f6,
count(case when t.regname!=p.username THEN 1 END) f7,
count(case when p.cause_id IN (22,1) THEN 1 END) f8,
count(case when cause_id in (24,23,25,3,2,4) THEN 1 END) f9,
count(case when cause_id in (26,5) THEN 1 END) f10,
count(case when cause_id in (27,6) THEN 1 END) f11,
count(case when cause_id in (28,8) THEN 1 END) f12,
count(case when cause_id in (29,9,32,36) THEN 1 END) f13,
count(case when cause_id in (30,10) THEN 1 END) f14,
count(case when cause_id in (31,11) THEN 1 END) f15,
count(case when cause_id in (33,13) THEN 1 END) f16,
count(case when cause_id in (34,35,7,15,12,14) THEN 1 END) f17,
count(case when p.otv_kon in ('34001') THEN 1 END) f18,
count(case when p.otv_kon in ('34002') THEN 1 END) f19,
count(case when p.otv_kon in ('34004') THEN 1 END) f20,
count(case when p.otv_kon in ('34') THEN 1 END) f21,
--new
sum(case when p.otv_kon in ('34001') THEN 1 END) f22,
sum(case when p.otv_kon in ('34001') THEN 1 END) f23
from t_block_ger t, t_petit p, t_mo w WHERE t.id_ger=p.id
AND p.mo_id=w.mo_id
AND p.conect_id=5 AND P.TYPE_ID in(1,3)
AND to_date(t.date_end) BETWEEN '01.01.2022' AND '01.05.2022'
order by f1
Ответы (1 шт):
Автор решения: Vitaliy Zlobin
→ Ссылка
COUNT(DISTINCT CASE WHEN p.otv_kon IN ('34001') THEN p.date_input END) AS f22