Как переместить столбец в строку и продублировать исходный заголовок столбца? - PullRequest
0 голосов
/ 25 марта 2020

У меня есть таблица, например, как показано ниже, алфавит - это заголовок, а цифры - его записи.

a   b   c   d   e   f
---------------------
3   4   5   6   2   3
5   3   2   9   8   7

Я хочу переставить таблицу, как показано ниже:

col1 col2
---------
a   3
b   4
c   5
d   6
e   2
f   3
a   5
b   3
c   2
d   9
e   8
f   7

Это не просто транспонирование из столбца в строку, но мне также нужно скопировать заголовок алфавита столько, сколько в исходной строке (если у меня есть 2 исходных строки, то мне нужно скопировать заголовок дважды, если у меня есть 3, то у меня есть скопировать 3 раза). Я новичок в postgresql, как этого добиться?

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Использовать боковое соединение:

select v.*
from t cross join lateral
     (values ('a', a), ('b', b), ('c', c), ('d', d), ('e', e), ('f', f)
     ) v(col, val);

По сравнению с подходом union all таблица сканируется только один раз. Это может немного выиграть в производительности, если ваш «стол» действительно более сложный запрос.

0 голосов
/ 25 марта 2020

Вы можете использовать UNION ALL.

SELECT 'a' col1,
       a col2
       FROM elbat
UNION ALL
...
UNION ALL
SELECT 'f' col1,
       f col2
       FROM elbat;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...