将行转换为包含日期的列



我是一名SAS程序员,具有基本的SQL知识。我正试图将SAS程序转换为SQL脚本,我需要帮助将行转换为SQL Server中的列。

我尝试了一些解决方案(如PIVOT,多连接等)在这个论坛上可用,但无法实现我所需要的。问题是,ID的行数可能从1到500(或更多)不等,我需要动态创建这些列。然而,在SAS中,我不必担心行数的变化,因为SAS将使用预定义的过程/方法(如Proc转置或数组)自动执行。

这是我正在尝试处理的一些示例数据。

感谢您在这方面的帮助。

ID  STARTDT ENDDT
1   1/1/2020    1/3/2020
1   2/25/2020   2/28/2020
1   3/10/2020   3/15/2020
2   1/1/2020    1/3/2020
2   2/25/2020   2/28/2020
2   3/10/2020   3/15/2020
2   3/20/2020   3/20/2020
2   3/25/2020   3/31/2020
3   1/1/2020    1/3/2020
4   2/25/2020   2/28/2020
4   3/10/2020   3/15/2020

所期望的输出。

ID  STDT1   ENDT1   STDT2   ENDT2   STDT3   ENDT3   STDT4   ENDT4   STDT5   ENDT5 ........... STDT(MAX) ENDT(MAX)
1   1/1/2020    1/3/2020    2/25/2020   2/28/2020   3/10/2020   3/15/2020   
2   1/1/2020    1/3/2020    2/25/2020   2/28/2020   3/10/2020   3/15/2020   3/20/2020   3/20/2020   3/25/2020   3/31/2020
3   1/1/2020    1/3/2020        
4   2/25/2020   2/28/2020   3/10/2020   3/15/2020

这里有一个可能的解决方案:

-- create table
CREATE TABLE Dates
(
ID INT,
StartDt VARCHAR(20),
EndDt VARCHAR(20)
)
-- Add sample data
INSERT INTO Dates VALUES (1, '1/1/2020', '1/3/2020')
INSERT INTO Dates VALUES (1, '2/25/2020', '2/28/2020')
INSERT INTO Dates VALUES (1, '3/10/2020', '3/15/2020')
INSERT INTO Dates VALUES (2, '1/1/2020' ,'1/3/2020')
INSERT INTO Dates VALUES (2, '2/25/2020', '2/28/2020')
-- Create a CTE to get the sequence for multiple occurrences of the same ID
-- Sequence1 is used for the second pivot on EndDt
WITH cte AS
(
SELECT
[ID]
,[Sequence] = ROW_NUMBER() OVER(PARTITION BY [ID] ORDER BY [ID])
,[Sequence1] = 100 + ROW_NUMBER() OVER(PARTITION BY [ID] ORDER BY [ID])
,[StartDt]
,[EndDt]
FROM Dates
)
-- SELECY with PIVOT on multiple columns
SELECT
[ID]
,[1] AS startdt1
,[101] AS enddt1
,[2] AS startdt2
,[102] AS enddt2
,[3] AS startdt3
,[103] AS enddt3
FROM cte x
PIVOT
(
MAX(StartDt)
FOR [Sequence] IN ([1], [2], [3])
) p1
PIVOT
(
MAX(EndDt)
FOR [Sequence1] IN ([101], [102], [103])
) p2
ORDER BY ID

参考:https://learn.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15

相关内容

  • 没有找到相关文章