Как преобразовать другой результат строки с одинаковым идентификатором в разные столбцы с уникальным идентификатором в SQL Запрос к серверу - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть две таблицы, которые имеют отношение "1: *". Я хочу объединить две таблицы и объединить все строки с одинаковым идентификатором в одну строку и разные столбцы, которые имеют одинаковое значение строки.

Чтобы мой результат в ssms 17 был:

table1.id    table2.tag 
------------------------
1            <value a>
1            <value b>
1            <value c>
2            <value d>
2            <value e>

Я хочу этот результат:

table1.id    C1.table2.tag    C2.table2.tag    C3.table2.tag
------------------------------------------------------------
1            <value a>        <value b>        <value c>
2            <value d>        <value e>        null

Ответы [ 2 ]

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

Если тегов не больше, вы можете выполнить условное агрегирование:

select id, 
       max(case when seq = 1 then tag end) as tag_1,
       max(case when seq = 2 then tag end) as tag_2,
       max(case when seq = 3 then tag end) as tag_3
from (select t1.id, t2.*, row_number() over (partition by t1.id order by t2.tag) as seq
      from table1 t1 inner join
           table2 t2
           on t2.id = t1.id
     ) t
group by id;

Если в таблице больше тегов, то вам нужен Dynami c Pivot.

0 голосов
/ 18 апреля 2020

Я бы не рекомендовал помещать каждый тег в отдельный столбец. Альтернативой является объединение тегов в один столбец.

Например:

select t1.table1_id,
       string_agg(t2.tag, ',') as tags
from table1 t1 join
     table2 t2
     on t2.id = t1.table2_id
group by t1.table1_id;

Тогда вам не нужно беспокоиться о максимальном количестве тегов для данного идентификатора или использования Dynami c SQL.

...