在SQL中重塑数据

时间:2015-02-12 17:25:52

标签: sql postgresql pivot

我有一个像

这样的简单表格
time_stamp, metric, value
2012/3/2  , x     , 1
2012/3/2  , y     , 1.6
2012/3/3  , x     , 0
2012/3/3  , y     , null
...

我想编写一个返回类似

的查询
time_stamp, x, y
2012/3/2  , 1, 1.6
2012/3/3  , 0, null    

换句话说,基本上是根据动态的一个字段的唯一值生成列,并将数据重新整形到其中。

我记得我曾在某个地方见过它,但我现在找不到它。

PS。我现在正在使用PostgreSQL。请注意该解决方案是否特定于特定DBMS。

更新:从中形成列的度量值是动态的。据我所知,这使得这更难,并且单个查询解决方案几乎不可能。

根据评论,我也尝试了交叉表,它是a)非常具体的bg和b)动态数量的表不太好。

1 个答案:

答案 0 :(得分:4)

使用conditional aggregate转置行。

select time_stamp,
      max(case when metric= 'X' then value End) as X, 
      max(case when metric= 'Y' then value End) as Y, 
From Yourtable
group by time_stamp