Postgresql

如何在 postgresSQL 中將單列轉換為多行條目

  • July 7, 2022

我有一個如下所示的表格。

CREATE TABLE tbl (sl_no int, username text, petname1 text, petname2 text);
   
INSERT INTO tbl VALUES
 (1, 'A', 'XYZ', 'ABC')
, (2, 'B', 'RTS', 'DEF')
, (3, 'C', 'QWE', 'GHI')
, (4, 'D', 'HGD', 'JKL')
;

如何將單列轉換為多行條目?進入這個結果:

1, 'A', 'XYZ'
1, 'A', 'ABC'
2, 'B', 'RTS'
2, 'B', 'DEF'
3, 'C', 'QWE'
3, 'C', 'GHI'
4, 'D', 'HGD'
4, 'D', 'JKL'

如果可能,使用 postgresql 11.3

select * from (
select sl_no, username, petname1 from tbl
union all
select sl_no, username, petname2 from tbl
) t order by 1

您可以使用 unpivot執行此操作**而無需再次查詢表。**最簡單的方法是使用CROSS JOIN LATERAL (VALUES

SELECT
 t.sl_no,
 t.username,
 v.petname
FROM tbl t
CROSS JOIN LATERAL (VALUES
   (petname1),
   (petname2)
) v(petname);

dotnetfiddle

引用自:https://dba.stackexchange.com/questions/314179