Select 个不同的列值
Select distinct values across columns
我正在尝试创建一个查询,该查询 return 在单行的 4 列中设置不同的值。我的 where 子句将结果的深度限制为仅一行,但将数据分成几列。例如
SELECT color1, color2, color3, color4 FROM art WHERE id = 1
会return(在列中)
|Red |Blue |Blue |Green |
但我只想要不同的值
|Red |Blue |Green | |
是否有使用逆轴然后回轴到列这样的事情?
一个选择是 UNPIVOT
您的数据,然后 PIVOT
通过 dense_rank()
例子
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
Returns
ID Color1 Color2 Color3 Color4
1 Blue Green Red NULL
注意: Where ID=1
是可选的
我正在尝试创建一个查询,该查询 return 在单行的 4 列中设置不同的值。我的 where 子句将结果的深度限制为仅一行,但将数据分成几列。例如
SELECT color1, color2, color3, color4 FROM art WHERE id = 1
会return(在列中)
|Red |Blue |Blue |Green |
但我只想要不同的值
|Red |Blue |Green | |
是否有使用逆轴然后回轴到列这样的事情?
一个选择是 UNPIVOT
您的数据,然后 PIVOT
通过 dense_rank()
例子
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
Returns
ID Color1 Color2 Color3 Color4
1 Blue Green Red NULL
注意: Where ID=1
是可选的