我有一个像
这样的简单表格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)动态数量的表不太好。
答案 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