【问题标题】:How to convert multiple column values to a single column having multiple rows in Postgres如何在Postgres中将多列值转换为具有多行的单列
【发布时间】:2021-10-22 05:53:12
【问题描述】:

我无法将多列转换为一列以保持其余列不变

我有下表table1

 Name        Category1         Category2        Category3   .....     Tag
=======     ===========       ===========      ===========          ========
 Jason         5                  6                 4                senior
 Walter        3                  7                 10               junior
   .
   .
   .

如何将所有类别合并到一个名为 category_mix 的列中?

基本上,我想使用来自table1 的数据来填充另一个表table2,以便以这种方式填充它

 Name            category_mix        Tag
=======         ==============     =======
Jason                5              senior
Jason                6              senior
Jason                4              senior
Walter               3              junior
Walter               7              junior
Walter               10             junior
 

如何在 Postgres 中执行此操作?

【问题讨论】:

    标签: sql postgresql unpivot


    【解决方案1】:

    您可以使用values 子句来实现反透视:

    select t.name, c.category_mix, t.tag
    from table1 t
       cross join lateral ( 
           values (category1), (category2), (category3)
       ) as c(category_mix);
    

    Online example

    【讨论】:

    • 这个语法正确吗?我一直收到一条错误消息,提示“category1 不存在。提示:t 中有一个名为 category1 的列,但在查询的这一部分中无法引用它”
    • @Vinay:抱歉,忘记lateral
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2021-12-21
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多