我有以下sql
CREATE TABLE #t ( id varchar(10)
,Rscd varchar(10)
,Accd varchar(10))
INSERT INTO #t Values ('EHC','A','B')
INSERT INTO #t Values ('DEN','C','D')
select EHC,DEN
from
(
select id as id2, value
from #t
cross apply
(
select id,Rscd union select id,Accd
) c (id2,value)
) d
pivot
(
max(value)
for id2 in ([EHC],[DEN])
) piv;
这产生输出为
EHC DEN
B D
但我需要Out out as
EHC DEN EHC2 DEN2
B D A C
这可能吗?谢谢你的帮助。
答案 0 :(得分:1)
您需要实现类似row_number()
的窗口函数才能获得结果。这将基于id
创建序列号。您似乎有一个特定的订单,您希望数据输入,如果是这样,那么当您通过CROSS APPLY进行解锁时,我会创建一个列,用于订购数据:
select EHC1,DEN1, EHC2, DEN2
from
(
select value,
id2 = id
+ cast(row_number() over(partition by id
order by so desc) as varchar(10))
from #t
cross apply
(
select id, Rscd, 1 union
select id, Accd, 2
) c (id2,value, so)
) d
pivot
(
max(value)
for id2 in ([EHC1],[DEN1], [EHC2],[DEN2])
) piv;