【问题标题】:Unnesting in PostgreSql在 PostgreSql 中取消嵌套
【发布时间】:2016-12-16 17:20:26
【问题描述】:

我有一个有 30 列的表,并且它一直在增长。我无法将其拆分为多个表,因为它会导致 Tableau 出现一些可视化问题。所以我正在寻找的解决方案是创建一个新表。老样子

id | name | city| country| metric1 | metric2|.....|metric30  
------------------------------------------------------------
1  | dgshfsshd| Bost |United Stats|sjdhsjdsjdhjs|gdshduadjd|.......|hdhsjfhsjfsjf
2  | jsghfghfg| gert |United Stats|sjdhsjdsjdhjs|gdshduadjd|.......|hdhsjfhsjfsjf
.  
.  
.  

新的表格格式应该有点像不确定它是否会起作用(我也愿意接受新想法)

id | name | city| country | metric name | metric value  
1  |dgfdhh| sjdh|sghshdjd|metric1|sjdsjhfsfhsjfhsjf  
2  |jagdha| qewt|shgshfgs|metric2|hfjshfjhsjfshjsfh  
.  
.  
.  

如果您还有其他问题,请告诉我。我正在使用 postgres

【问题讨论】:

  • 你的问题是什么?
  • 我不确定这个解决方案是否有效,忘了补充一点,指标具有相互依赖性,即指标 4 的值取决于指标 3,依此类推 并非总是如此,而是有时。我该如何解决?
  • 搜索解决方案的另一个关键词是 UNPIVOT,不幸的是它似乎不像其他一些平台那样具有很好的 unpivot 功能。所以有 2 个主要的更明显的解决方案,1)将所有与 x# 的选择联合 2)交叉连接到一个计数表和大型案例语句。但我标记的链接也有一些可能感兴趣的动态和 json 解决方案

标签: sql postgresql unpivot


【解决方案1】:

您可以取消嵌套这些列的数组并使用with ordinality 获取数组中列的索引

select t.id, t..name, t.city, t.country, 
       concat('metric', m.idx) as metric_name, 
       m.val as metric_value
from the_table t
  cross join lateral unnest(array[metric1,metric2,.....,metric30) with ordinality as m(val,idx);

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2020-03-14
    相关资源
    最近更新 更多