Отображать нулевое значение, используя функции ранга в Oracle SQL
Это расширение другого вопроса: как отобразить нулевое значение, когда запись присутствует более одного раза в Oracle Ocl
У меня есть стол, как показано ниже:
c_id c_name c_tax
1001 Element1 1
1001 Element1 2
1001 Element2 1
1001 Element2 2
1002 Element3 null
1002 Element4 1
1002 Element4 2
Я хочу показать null
во-первых column(c_id)
если он присутствует более одного раза и да или нет в третьем column(c_tax)
на основании следующего условия.
Element1
имеет два налога 1 и 2. Так Element1
должен отображаться один раз и c_tax
должно быть да.Element3
не имеет налога, поэтому он должен отображаться как null
,
Мой вывод должен выглядеть следующим образом:
c_id c_name c_tax
1001 Element1 Yes
null Element2 Yes
1002 Element3 No
null Element4 Yes
1 ответ
Решение
Если я правильно понимаю:
select (case when row_number() over (partition by cid order by c_name) = 1 then cid end) as cid,
c_name,
(case when max(c_tax) is not null then 'yes' else 'no' end) as c_tax
from t
group by c_id, c_name
order by c_id, c_name;