Sql 如何删除重复的datetime并将一个列值转换为新的列名?
我需要像这样的回应Sql 如何删除重复的datetime并将一个列值转换为新的列名?,sql,Sql,我需要像这样的回应 | datetime | id |name | value | -------------------------------------------- | 2020-01-01 | 1 | foo | 23 | -------------------------------------------- | 2020-01-01 | 2 | foo | 24 | ---------------
| datetime | id |name | value |
--------------------------------------------
| 2020-01-01 | 1 | foo | 23 |
--------------------------------------------
| 2020-01-01 | 2 | foo | 24 |
--------------------------------------------
| 2020-01-02 | 1 | foo | 43 |
--------------------------------------------
| 2020-01-02 | 2 | foo | 45 |
到目前为止,我所取得的成就是
datetime | 1_foo | 2_foo |
--------------------------------
2020-01-01 | 23 | 24 |
--------------------------------
2020-01-02 | 43 | 45 |
您可以使用条件聚合:
| datetime | 1_foo |2_foo |
----------------------------------
| 2020-01-01 | 23 | null |
----------------------------------
| 2020-01-01 | null | 24 |
----------------------------------
| 2020-01-02 | 43 | null |
----------------------------------
| 2020-01-02 | null | 45 |
我不确定
name
与结果有什么关系。您可能还希望在查询中使用其中name='foo'
。(1)我删除了不一致的数据库标记。请仅使用您正在使用的数据库进行标记。(2) 解释要实现的逻辑。(3) 显示生成您现在得到的结果的查询。感谢您的更新和更正。伟大的学习这里的名字是什么,但你可以把它作为“列名”。我对列名不是很具体。谢谢你的回复
select datetime,
max(case when id = 1 then value end) as value_1,
max(case when id = 2 then value end) as value_2
from t
group by datetime;