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