在PostgreSql中

时间:2016-12-16 17:20:26

标签: sql postgresql unpivot

我有一个有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

1 个答案:

答案 0 :(得分:0)

您可以取消嵌套这些列的数组,并使用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);