【问题标题】:How to get a list of fields and distinct values from a table如何从表中获取字段列表和不同值
【发布时间】:2021-05-19 09:28:04
【问题描述】:

我需要将列转换为行,然后将不同的值放在旁边。理想情况下使用 postgresql,但如果解决方案更容易,可以使用 python。还需要是动态的,因为每次运行转换时字段都会有所不同。我已经通过搜索进行了搜索,但很难找到与此类似的任何内容。

源数据表:

option1 option2 option3
1 A X
1 B Y
2 A X
3 B Y
3 A X

目标表:

fieldname option
option1 1
option1 2
option1 3
option2 A
option2 B
option3 X
option3 Y

【问题讨论】:

    标签: python sql postgresql unpivot


    【解决方案1】:

    有两种方法可以做到这一点

    1. 使用UNNEST
    select distinct 
    unnest(array['option1','option2','option3']),
    unnest(array[option1,option2,option3])
    from test
    order by 1,2
    
    1. 使用Cross Join Lateral
    select distinct t2.*
    from test t1
      cross join lateral (
         values 
           ('option1',t1.option1 ),
           ('option2',t1.option2),
           ('option3',t1.option3)
           
      ) as t2(option, value)
    order by 1,2
    
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      相关资源
      最近更新 更多