根据两个时间戳列将单行拆分为多行

Split Single Row into Multiple Rows Based on Two Timestamp Columns

我要拆分以下记录:

DeviceId    StartTime                  EndTime
------------------------------------------------------------
1001        2022-02-12 07:27:00.000    2022-02-12 16:23:00.000
1002        2022-02-14 03:36:00.000    2022-02-14 04:36:00.000

进入:

DeviceId    Timestamp                   State
-------------------------------------------------
1001        2022-02-12 07:27:00.000     1    
1001        2022-02-12 16:23:00.000     2
1002        2022-02-14 03:36:00.000     1
1002        2022-02-14 04:36:00.000     2

新的 State 列应基于 TimestampStartTime ( = 1) 还是 EndTime ( = 2)。

实现此目的的 t-sql 查询是什么?

您可以使用 VALUES table 值构造函数反转 table:

SELECT t.DeviceId, v.[Timestamp], v.[State]
FROM YourTable t
CROSS APPLY (VALUES
   (t.StartTime, 1),
   (t.EndTime, 2)
) v ([Timestamp], [State])

如果要在生成值时添加条件,则需要不同的语句:

SELECT t.DeviceId, v.[Timestamp], v.[State]
FROM YourTable t
CROSS APPLY (VALUES
   (CASE WHEN t.Status IN (0, 1) THEN t.StartTime END, 1),
   (t.EndTime, 2)
) v ([Timestamp], [State])