Как пометить, если что-то не появляется в списке - PullRequest
0 голосов
/ 19 марта 2020

Я не уверен, как точно сформулировать это в заголовке, но у меня есть список людей, у которых есть несколько записей, каждая строка - это запись, а в одном поле - какой тип записи. Что мне нужно сделать, так это иметь возможность пометить, если у кого-то нет определенного типа записи.

Данные выглядят следующим образом

person id       type
1                a
1                b
1                c
2                b
3                a
3                e
3                d
3                c
4                a
4                c
4                e

В этом списке идентификаторы лиц 3 и 4 не имеют типа b, поэтому я хотел бы создать флаг, чтобы выделить это. В выходных данных тип не требуется, поэтому это будет просто идентификатор человека и флаг.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 марта 2020

Использовать оконную функцию:

select t.*, 
       coalesce(max(case when type = 'b' then 'yes' end) over (partition by personid), 'no') as b_flag
from table t;

Вы также можете выполнить агрегирование:

select personid, 
       coalesce(max(case when type = 'b' then 'yes' end), 'no') as b_flag
from table t
group by personid;
...