查询交叉表视图

时间:2017-11-06 09:19:31

标签: sql postgresql crosstab unpivot

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

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

我想要一个显示如下表所示的查询:

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

2 个答案:

答案 0 :(得分:2)

使用 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

相关:

注意:您添加了标记。但是来自附加tablefunc module的Postgres函数crosstab()用于 pivoting ,而此任务则相反,有时也称为 unpivoting 。相关:

答案 1 :(得分:0)

只需使用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
相关问题