Как сопоставить количество столбцов и, если их больше 2, обновить таблицу в postgresql - PullRequest
0 голосов
/ 22 апреля 2020

Таблица ввода
https://i.stack.imgur.com/eH6W3.jpg
Таблица вывода, которую я хочу
https://i.stack.imgur.com/RsCb9.jpg
Я пробовал таким образом

update tb set Exception = 'Y'
select Card_No from tb
where Card_No in ( select Card_No from (select Card_No count(Left(Card_No,6)) from tb
group by Card_No having count(*)>=2)a);

выше запроса, дающего мне указание таким образом
https://i.stack.imgur.com/vJ47z.jpg

1 Ответ

1 голос
/ 22 апреля 2020

Вы можете сделать:

update mytable 
set exception = case when cnt > 1 then 'Y' else 'N' end
from (
    select substring(card_no, 1, 6) sub_card_no, count(*) cnt 
    from mytable
    group by 1
) t
where t.sub_card_no = substring(mytable.card_no, 1, 6)

Я мог бы более эффективно использовать оконные функции:

update mytable 
set exception = case when cnt > 1 then 'Y' else 'N' end
from (
    select card_no, count(*) over(partition by substring(card_no, 1, 6)) cnt 
    from mytable
) t
where t.card_no = mytable.card_no
...