「、」カンマをクエリーに入れてください。だから '、' + c.Name。
SELECT
s.Id
,s.Name
,STUFF(
(
SELECT
',' + c.Name
FROM [Groups] AS c
INNER JOIN [GroupToUser] AS stc ON stc.CategoryId = c.Id
WHERE stc.StageId = s.Id
FOR XML PATH('')
), 1, 1, '') AS GroupsTheUserBelongsTo
FROM [Users] AS s
何が起こっているのかを説明します。標準クエリを使用して、sql-serverにXMLに変換するように指示しますが、ルート要素はなく、列名がないためタグなしでも使用できます。カンマまたはその他の区切り文字を追加すると、各行の間にカンマが挿入されます。 STUFF(xmlstring、1,1、 '')は文字列の最初の位置をとり、そこにある文字を取り出して、 ''の1回の出現を入れます。これは基本的に先頭のカンマを取り除くのと同じです。
ここでは、何が起こっているのかをよりよく理解するために断片に分解する少しの例です。
DECLARE @Table AS TABLE (Col VARCHAR(10))
INSERT INTO @Table VALUES ('A'),('B'),('C')
DECLARE @Values AS VARCHAR(MAX)
SELECT @Values = (
SELECT
',' + Col
FROM
@Table
FOR XML PATH (''))
SELECT @Values
SELECT STUFF(@Values,1,1,'')
@DanGuzmanは、あなたの名前の欄に特殊文字を心配している場合は/交換し、あなたが試すことができ、あなたの文字列に残っているXMLエンコーディングエンコードになるという良い点を作る:
SELECT
s.Id
,s.Name
,STUFF((
SELECT
',' + c.Name
FROM [Groups] AS c
INNER JOIN [GroupToUser] AS stc ON stc.CategoryId = c.Id
WHERE stc.StageId = s.Id
FOR XML PATH (''), TYPE).value('.','nvarchar(MAX)')
,1,1,'') AS GroupsTheUserBelongsTo
FROM
[Users] AS s
@Jaylenはい、それあなたの文字列が実際にカンマで区切られた文字列になるように区切り文字を追加しました。 XMLの場合、データ型はNOT XMLという文字データ型でなければなりませんが、期待するデータ型が得られていない場合は、VARCHAR(MAX)に変換することもできます。 https://msdn.microsoft.com/en-us/library/ms188043.aspx – Matt
結果には、特定の文字をエスケープするために元の文字の代わりにXMLエンティティ参照が含まれていることに注意してください(たとえば、 "&"の代わりに "&" TYPE'は 'value'メソッドと共に指定されます:' FOR XML PATH( '')、TYPE).value( '。'、 'nvarchar(MAX)') '。 –