PostgreSQL динамически перемещает строки в столбцы - PullRequest
1 голос
/ 27 марта 2019

Привет! Я пытаюсь сделать так, чтобы результат моего запроса динамически выравнивался по 1 строке на столбец. Пожалуйста, помогите мне, если это возможно

Например, это мой стол

id , names , comm    , contrib
1    samp1   randtext     9
2    samp1   randtext     2
3    samp1   randtext     3 
5    samp2   randtext     4 
6    samp2   randtext     1   

тогда результат, который я пытаюсь получить, равен

names  comm1    comm2    comm3    contrib1  contrib2  contrib3 
samp1  randtext,randtext,randtext    9      , 2       , 3
samp2  randtext,randtext,            4      , 1       ,  

спасибо за помощь.

1 Ответ

0 голосов
/ 27 марта 2019

Мы можем использовать комбинацию ROW_NUMBER с сводным запросом:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY names ORDER BY id) rn
    FROM your_table
)

SELECT
    names,
    MAX(CASE WHEN rn = 1 THEN comm END) comm1,
    MAX(CASE WHEN rn = 2 THEN comm END) comm2,
    MAX(CASE WHEN rn = 3 THEN comm END) comm3,
    MAX(CASE WHEN rn = 1 THEN contrib END) contrib1,
    MAX(CASE WHEN rn = 2 THEN contrib END) contrib2,
    MAX(CASE WHEN rn = 3 THEN contrib END) contrib3
FROM cte
GROUP BY
    names
ORDER BY
    names;
...