Transpose\pivot 一对包含两列的行,其中一列是日期时间,另一列是 SQL 服务器中的文本

Transpose\pivot pair of rows with two columns where one is DateTime and the other Text in SQL Server

我有以下table结构和数据:

数据按 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?

实现此输出

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

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 记录总是以逻辑对的形式出现,并且没有间隙。如果没有,那么我们将不得不做更多的工作来生成您的输出。