sql,将子查询数据获取到表中
对不起,标题不好。我不知道该如何描述这一点 我有一个表sql,将子查询数据获取到表中,sql,sql-server,join,Sql,Sql Server,Join,对不起,标题不好。我不知道该如何描述这一点 我有一个表users,它有: userID | firstname | lastname 然后我有第二个表,名为userColors,它记录了每个用户最喜欢的颜色:每个用户可以有一种颜色,也可以有多种颜色: id | userID | colorID 然后是颜色表: colorID | colorName 我目前导出了一长串用户,每种颜色都有自己的行。因此,有些用户将有一行,有些用户将有多行 我现在想尝试的是,让每个用户在一行中,在最
users
,它有:
userID | firstname | lastname
然后我有第二个表,名为userColors
,它记录了每个用户最喜欢的颜色:每个用户可以有一种颜色,也可以有多种颜色:
id | userID | colorID
然后是颜色
表:
colorID | colorName
我目前导出了一长串用户,每种颜色都有自己的行。因此,有些用户将有一行,有些用户将有多行
我现在想尝试的是,让每个用户在一行中,在最后的列中列出最喜欢的颜色(每个用户在自己的行中,或者在同一列中,只是逗号分隔)。例如:
userID | firstname | lastName | colors
------------------------------------------------
2 | harry | smith | red
3 | larry | whatever | blue, yellow
或:
我猜答案是一个子查询,但不确定如何加入它……这应该给你一个提示:
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
下面是演示以下查询的示例:
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
实际上,答案是pivot查询。谷歌“SQLServerPivotQuery”,你会发现一些例子。如果你想在查询中这样做,这是可能的。如果您想从相关数据更改为具有这种可怕结构的表,那么不要这样做。
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