выбрать отдельные значения в нескольких столбцах и сохранить в общем столбце с тегами столбца - PullRequest
0 голосов
/ 05 мая 2020
• 1000 прибывает. Желаемый результат:
col   source
a     col1, col2
b     col1
c     col1
d     col1
e     col1
f     col1, col2

Я могу найти отдельные столбцы в отдельных столбцах, но не могу создать один столбец и добавить источник метки.

ниже я использую запрос:

select distinct on (col1, col2) col1, col2 from table

Любые предложения были бы очень полезны.

1 Ответ

2 голосов
/ 05 мая 2020

Вы можете развернуть столбцы и объединить их обратно:

select u.value, string_agg(distinct u.source, ',' order by u.source)
from data
  cross join lateral (  
     values('col1', col1), ('col2', col2)
  )as u(source,value)
group by u.value
order by u.value;

Онлайн-пример

В качестве альтернативы, если вы не хотите перечислять каждый столбец, вы можете преобразовать строку в значение JSON, а затем развернуть, что:

select x.value, string_agg(distinct x.source, ',' order by x.source)
from data d
  cross join lateral jsonb_each_text(to_jsonb(d)) as x(source, value)
group by x.value  
order by x.value;
...