如何在 Microsoft SQL Server 中“取消堆叠”SQL 中的数据
Posted
技术标签:
【中文标题】如何在 Microsoft SQL Server 中“取消堆叠”SQL 中的数据【英文标题】:How to "unstack" data in SQL in Microsoft SQL Server 【发布时间】:2021-10-08 13:49:24 【问题描述】:我的桌子是这样的:
UTC_DT ID value
-----------------------------
2021-09-29 12:30:00 1 10
2021-09-29 12:30:00 2 20
2021-09-29 12:30:00 3 30
2021-09-29 12:45:00 1 11
2021-09-29 12:45:00 2 21
2021-09-29 12:45:00 3 31
我需要这个形状:
UTC_DT 1 2 3
------------------------------
2021-09-29 12:30:00 10 20 30
2021-09-29 12:45:00 11 21 31
我不知道该怎么做。我想也许使用PIVOT
,但我无法弄清楚正确的语法。请帮忙。
【问题讨论】:
这能回答你的问题吗? Convert Rows to columns using 'Pivot' in SQL Server 我想是的,我只是不明白发生了什么。这周晚些时候我有一些时间再次处理这个问题。感谢您花时间编辑我的问题并回复! 【参考方案1】:您可以使用简单的条件聚合来做到这一点,如下所示:
select utc_dt,
max(case id when 1 then value end) [1],
max(case id when 2 then value end) [2],
max(case id when 3 then value end) [3]
from t
group by utc_dt
【讨论】:
【参考方案2】:既然您要求提供一个枢轴示例,那么您就开始吧:
WITH cte AS (
SELECT * FROM (VALUES
('2021-09-29 12:30:00', 1, 10),
('2021-09-29 12:30:00', 2, 20),
('2021-09-29 12:30:00', 3, 30),
('2021-09-29 12:45:00', 1, 11),
('2021-09-29 12:45:00', 2, 21),
('2021-09-29 12:45:00', 3, 31)
) AS x(UTC_DT, ID, value)
)
SELECT pvt.*
FROM (
SELECT *
FROM cte
) AS src
PIVOT (
MAX(value)
FOR ID IN ([1], [2], [3])
) AS pvt;
当您不知道要转换的一组(在这种情况下)ID 时,情况会变得很糟糕。
【讨论】:
以上是关于如何在 Microsoft SQL Server 中“取消堆叠”SQL 中的数据的主要内容,如果未能解决你的问题,请参考以下文章