将多行转换为列 - 不使用PIVOT

时间:2016-11-14 19:38:13

标签: sql sql-server case

我知道有很多关于此的帖子,但我似乎找不到适用的帖子。我想将导致多行的值放入单独的列中,以便我只有一行数据。这是一个具体的例子:

SELECT ID, FavoriteColor
FROM MyColorTable

由于用户可以输入多种喜欢的颜色 - 结果:

ID      FavoriteColor
856     Blue
856     Red
122     Purple
909     Blueish-Pink

我需要格式化为(注意 - 我不能使用PIVOT):

ID      FavoriteColor1      FavoriteColor2
856     Blue                Red
122     Purple
909     Blueish-Pink

有人可以帮我解决这个问题吗?也许用CASE声明?我花了太多时间摆弄我的SQL。

1 个答案:

答案 0 :(得分:1)

假设你不能动态,条件聚合可能有帮助

Select ID
      ,FavoriteColor1 = max(case when RN=1 then FavoriteColor else '' end)
      ,FavoriteColor2 = max(case when RN=2 then FavoriteColor else '' end)
From  (
        Select *
              ,RN=Row_Number() over (Partition By ID Order by FavoriteColor)
         from YourTable
      ) A
Group By ID

返回

ID  FavoriteColor1  FavoriteColor2
122 Purple  
856 Blue            Red
909 Blueish-Pink