【问题标题】:How to "unstack" data in SQL in Microsoft SQL Server如何在 Microsoft SQL Server 中“取消堆叠”SQL 中的数据
【发布时间】: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,但我无法弄清楚正确的语法。请帮忙。

【问题讨论】:

标签: sql sql-server pivot


【解决方案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 时,情况会变得很糟糕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 2015-08-12
      • 2018-09-28
      相关资源
      最近更新 更多