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 是可选的