【问题标题】:Transpose\pivot pair of rows with two columns where one is DateTime and the other Text in SQL ServerTranspose\pivot 具有两列的行对,其中一列是日期时间,另一列是 SQL Server 中的文本
【发布时间】:2019-03-01 18:54:03
【问题描述】:

我有如下表结构和数据:

数据按 ASC 排序,每个 Master Clear 都有一个后续 Blend Closed。如果没有后续的Blend Closed,那么它应该收到NULL

现在我想得到以下结果:

Master Clear                Blend Closed
2018-09-17 03:12:03         2018-09-17 10:00:03
2018-09-17 10:37:03         2018-09-18 01:05:02
2018-09-18 04:55:02         2018-09-18 21:51:00
2018-09-18 22:55:00         2018-09-19 03:02:01
.                           .
.                           .
.                           .
2018-09-23 20:10:56         NULL

这是获取行对并将Time 列值移动到其适当的Value 列:Master ClearBlend Closed

我试图得到这个数据形状,但无论如何都做不到。有什么方法可以使用 T-SQL 实现这个输出?

【问题讨论】:

    标签: sql-server merge pivot sql-server-2014 transpose


    【解决方案1】:

    一种选择是为每个值组分配一个行号,然后执行常规数据透视查询:

    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY Value ORDER BY Time) rn
        FROM [BUR_BLEND].[dbo].[BLEND_START_END_TIMES]
    )
    
    SELECT
        MAX(CASE WHEN Value = 'Master Clear' THEN Time END) AS [Master Clear],
        MAX(CASE WHEN Value = 'Blend Closed' THEN Time END) AS [Blend Closed]
    FROM cte
    GROUP BY rn
    ORDER BY rn;
    

    Demo

    请注意,此答案假定 Master ClearBlend Closed 记录始终以逻辑对形式出现,并且没有间隙。如果没有,那么我们将不得不做更多的工作来生成您的输出。

    【讨论】:

    • @LenielMaccaferri 添加了演示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多