将多列合并为一列多行

Merge multiple columns into one column with multiple rows

在 PostgreSQL 中,如何将多列合并为一列多行?

这些列都是布尔值,所以我想:

我有这个table:

ID   | A   | B   | C
1      0     1     0
2      1     1     0
3      0     0     1
4      1     0     1
5      1     0     0 
6      0     1     1

我想要这个table:

ID   | Letter
1      B
2      A
2      B
3      C
4      A
4      C
5      A
6      B
6      C

我想你需要这样的东西:

SELECT ID, 'A' as Letter FROM table WHERE A=1
UNION ALL
SELECT ID, 'B' as Letter FROM table WHERE B=1
UNION ALL
SELECT ID, 'C'as Letter FROM table WHERE C=1
ORDER BY ID, Letter 
SELECT ID,
(CASE 
    WHEN TABLE.A = 1 then 'A' 
    WHEN TABLE.B = 1 then 'B'
    WHEN TABLE.C = 1 then 'C' 
    ELSE NULL END) AS LETTER
from TABLE

你可以试试这个。

 insert into t2 select id, 'A' from t1 where A=1;
 insert into t2 select id, 'B' from t2 where B=1;
 insert into t2 select id, 'C' from t3 where C=1;

如果你在乎顺序,那么你可以这样做。

insert into t3 select id, letter from t2 order by id, letter;

W/o UNION

您可以使用单个查询来获得所需的输出。Real time example

select id
    ,regexp_split_to_table((
            concat_ws(',', case 
                    when a = 0
                        then null
                    else 'a'
                    end, case 
                    when b = 0
                        then null
                    else 'b'
                    end, case 
                    when c = 0
                        then null
                    else 'c'
                    end)
            ), ',') l
from c1;

regexp_split_to_table() & concat_ws()