我的表格如下:
购物台:
ShopID | PersonID
-----------------
1 | 10001
2 | 10002
2 | 10003
人员表
PersonID | PersonName
---------------------
10001 | Alex
10002 | John
10003 | William
之后,我想通过ShopID分组。我的预期结果如下:
ShopID | PersonName
--------------------
1 | Alex
2 | John / William
我试着参考:Combine multiple rows into one row。和http://www.mssqltips.com/sqlservertip/2914/rolling-up-multiple-rows-into-a-single-row-and-column-for-sql-server-data/。但它不是我想要的。
如何将多行合并到另一个表中的一行?
答案 0 :(得分:1)
查看for xml
选项以连接结果。 stuff
函数用于删除正斜杠的第一个实例,xml.value
函数用于保持&, <, >
和其他特殊字符不被XML结尾& > <
,等
我的原始答案查询中有一个错误,这是编辑后的版本:
Select s.shopid,
Stuff (
(
select ' / ' + p.personName
from person p
inner join shop s2 on s2.personID = p.personID
where s2.shopID = s.shopID
For xml path(''), TYPE --for xml to place everything under node '', which will concatenate the results.
)
.value('.','NVARCHAR(MAX)') --this is used to convert the XML to nvarchar(max), so that &, <, >, and other special chars do not get XML encoded.
, 1,3,'') --use stuff to replace first 3 characters with empty string.
as PersonName
From shop s
Group by s.shopid
;