Объединение строк в postgresql с динамическим числом строк, подходящим для условия объединения - PullRequest
0 голосов
/ 11 октября 2018

У меня есть таблица с множеством записей.Он имеет следующую структуру:

Таблица (col1, col2, col3, col4, col5, col6):

a b c val1  val2  val3
d e f val4  val5  val6
d e f val7  val8  val9
g h i val10 val11 val12
g h i val13 val14 val15
g h i val16 val17 val18

И есть еще много других строк,

В результате я хочу получить таблицу:

Таблица (col1, col2, col3, col4_1, col4_2, col4_3, col5_1, col5_2, col5_3, col6_1, col6_2, col6_3):

    a b c val1  val2  val3  null  null  null  null  null  null  
    d e f val4  val5  val6  val7  val8  val9  null  null  null      
    g h i val10 val11 val12 val13 val14 val15 val16 val17 val18 

Словами: у меня есть какая-то часть таблицы, которая имеет тот же col1, col2, col3, но другой col4, col5, col6.Количество строк на одно и то же col1, col2, col3 варьируется от 1 до 3 (заранее неизвестно).

Моя идея состояла в том, чтобы использовать GROUP BY, но как обрабатывать col4, col5, col6 значения, которые можно встретить в динамическом количестве строк?

Как создать такую ​​таблицу?

1 Ответ

0 голосов
/ 11 октября 2018

Можно использовать условное агрегирование и row_number():

select col1, col2, col3,
       max(case when seqnum = 1 then col4 end) as col4_1,
       max(case when seqnum = 1 then col5 end) as col5_1,
       max(case when seqnum = 1 then col6 end) as col6_1,
       max(case when seqnum = 2 then col4 end) as col4_2,
       max(case when seqnum = 2 then col5 end) as col5_2,
       max(case when seqnum = 2 then col6 end) as col6_2,
       max(case when seqnum = 3 then col4 end) as col4_3,
       max(case when seqnum = 3 then col5 end) as col5_3,
       max(case when seqnum = 3 then col6 end) as col6_3
from (select t.*, row_number() over (partition by col1, col2, col3 order by col1) as seqnum
      from t
     ) t
group by col1, col2, col3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...