我的数据如下:
PT_ID Time HR RR SysBP
1 830 120 24
1 900 124 118
1 1000 115
1 1045 118 20
ETC。
所需的输出:
PT_ID Time1 HR1 RR1 SysBP1 Time2 HR2 RR2 SysBp2 Time3 Etc
1 830 24 900 124 118 1000
这种类型的操作对于我的SQL新手来说太棘手了,如果您都知道一个潜在的解决方案,我会很好奇。
答案 0 :(得分:3)
如果您有一个已知的或最大数量的观测值,则可以将PIVOT与Row_Number()配合使用(假设TIME是正确的序列)
如果未知的观测值/列数,则必须使用一些动态SQL。
示例
Select *
From (
Select A.[PT_ID]
,B.*
From (Select *,RN=Row_Number() over (Partition By PT_ID Order by Time) From YourTable ) A
Cross Apply (values (concat('Time' ,RN),[Time])
,(concat('HR' ,RN),[HR])
,(concat('RR' ,RN),[RR])
,(concat('SysBP',RN),[SysBP])
) B(Item,Value)
) src
Pivot (sum(Value) for Item in ([Time1],[HR1],[RR1],[SysBP1]
,[Time2],[HR2],[RR2],[SysBP2]
,[Time3],[HR3],[RR3],[SysBP3]
,[Time4],[HR4],[RR4],[SysBP4]
) ) pvt
返回
我不小心编辑了此帖子,但并不意味着删除了该编辑。