我有一张表users
,其中包含:
userID | firstname | lastname
然后我有一个名为userColors
的第二个表,它记录每个用户最喜欢的颜色:每个用户可以有一种颜色,或许多颜色:
id | userID | colorID
然后是colors
表:
colorID | colorName
我目前导出一长串用户,每种颜色都有自己的行。所以有些用户会有一行,有些会有多行。
我现在想要尝试的是,将每个用户放在一行上,最后一列中最喜欢的颜色列表(每个都在自己的行中 - 或 - 在同一列中,只用逗号分隔)。如:
userID | firstname | lastName | colors
------------------------------------------------
2 | harry | smith | red
3 | larry | whatever | blue, yellow
OR:
userID | firstname | lastName | color1 | color2 | color_as_many_as_needed....
----------------------------------------------------------------------------------
2 | harry | smith | red
3 | larry | whatever | blue | yellow
我猜答案是一个子查询,但不知道如何加入它......
答案 0 :(得分:2)
以下SQL Fiddle演示了以下查询:
SELECT u.*,
colors = STUFF((
SELECT ', ' + c.colorName
FROM userColors AS uc
INNER JOIN colors AS c ON uc.colorID = c.colorID
WHERE u.userID = uc.UserID
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM users AS u
答案 1 :(得分:0)
这应该给你一个提示:
select 'test' as Test, 1 as Item
into #test
union select 'test2', 2
union select 'test', 3
union select 'test', 5
select t2.test, STUFF((SELECT ', ' + cast(t1.Item as varchar (10) )
FROM #test t1 where t2.test = t1.test
FOR XML PATH('')), 1, 1, '')
from #test t2
group by t2.test