Отображать нулевое значение, используя функции ранга в 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;
Другие вопросы по тегам