【问题标题】:Select distinct values across columns跨列选择不同的值
【发布时间】:2020-05-20 21:55:46
【问题描述】:

我正在尝试创建一个查询,该查询返回单行中 4 列的不同值。我的 where 子句将结果的深度限制为一行,但将数据分成列。例如

SELECT color1, color2, color3, color4 FROM art WHERE id = 1

会返回(在列中)

|Red |Blue |Blue |Green |

但我只想要不同的值

|Red |Blue |Green | |

有没有使用 unpivot 然后再转回列的事情?

【问题讨论】:

    标签: sql-server pivot unpivot


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      相关资源
      最近更新 更多