一种选择是UNPIVOT您的数据,然后通过dense_rank()PIVOT
示例
Declare @YourTable Table ([ID] varchar(50),[Color1] varchar(50),[Color2] varchar(50),[Color3] varchar(50),[Color4] varchar(50))
Insert Into @YourTable Values
(1,'Red','Blue','Blue','Green')
Select *
From (
Select A.ID
,B.Item
,Col = concat('Color',dense_rank() over (partition by ID order by Item) )
from @YourTable A
Cross Apply ( values (color1)
,(color2)
,(color3)
,(color4)
) B(Item)
Where ID=1
) src
Pivot (max(item) for Col in (Color1,Color2,Color3,Color4) ) pvt
退货
ID Color1 Color2 Color3 Color4
1 Blue Green Red NULL
注意:Where ID=1 是可选的