sql - 在 SQL 中 reshape 数据

标签 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    

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

我记得我在哪里见过它,但我现在找不到了。

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

更新:从中形成列的指标值是动态的。我知道这使这变得更加困难,而且几乎不可能使用单个查询解决方案。

根据评论,我也尝试过交叉表,它 a) 非常特定于 pg,b) 不太适合动态表数。

最佳答案

使用条件聚合转置行。

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

关于sql - 在 SQL 中 reshape 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28483895/

相关文章:

php - 使用 PHP 和 SQL 的购物车

sql - 单击 VB 中 DataGridView 中的行时填充文本框?

sql - "AS"附近的语法错误

sql - 你如何排除未知数?

sql - Laravel Eloquent 在每个数据透视表字段条件下获取多对多关系

sql - 如何合并两个具有不同列的表

python - Django 重复查询导致加载缓慢

postgresql - 如何添加 "on delete cascade"约束?

sql - 从 "time with time zone"和时区名称中获取 "time without time zone"

python - 将 pandas 列转置为一行,使用另一列作为索引