【问题标题】:Query for crosstab view查询交叉表视图
【发布时间】:2018-04-18 09:50:03
【问题描述】:

我在 PostgreSQL 中有一个如下表:

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

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

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

【问题讨论】:

    标签: sql postgresql crosstab unpivot


    【解决方案1】:

    使用单个 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。相关:

    【讨论】:

    • 真不错,没见过这样的符号
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2011-03-01
      • 2014-10-23
      • 2017-03-06
      • 2010-10-13
      相关资源
      最近更新 更多