查询交叉表视图

Query for crosstab view

我在 PostgreSQL 中有一个 table,如下所示:

--------------------------------------------------------------
Item1 | Item2 | Item3 | Item4 |Value1| Value2| Value3| Value4|
--------------------------------------------------------------

我想要一个查询来显示这个 table,如下所示:

ItemHead| ValueHead
---------------
Item1 | Value1|
---------------
Item2 | Value2| 
----------------
Item3 | Value3| 
----------------
Item4 | Value4|
---------------

只需使用UNION ALL

SELECT item1, value1 FROM your_tab
UNION ALL
SELECT item2, value2 FROM your_tab
UNION ALL
SELECT item3, value3 FROM your_tab
UNION ALL
SELECT item4, value4 FROM your_tab

使用 single SELECTLATERAL 连接到 VALUES 表达式。这比多个 SELECT 语句更短更快:

SELECT v.*
FROM   tbl, LATERAL (
   VALUES
      (item1, value1)
    , (item2, value2)  -- data types must be compatible
    , (item3, value3)
    , (item4, value4)
   ) v ("ItemHead", "ValueHead");  -- your desired column names

相关:

注意:您添加的标签 . But the Postgres function crosstab() from the additional tablefunc module 用于 pivoting,而此任务则相反,有时称为 unpivoting。相关:

  • PostgreSQL Crosstab Query