2017-09-27 1 views
0

Je suis en train d'utiliser la réponse trouvée here à concaténer une collection groupée de cordes sauf que je voudrais la sortie d'avoir des guillemets autour de chaque élément.SQL Server - LISTE AGG avec des citations

Field A | Field B 
1  | A 
1  | B 
2  | A 

1 | "A","B" 
2 | "A" 

SELECT FieldA , STUFF((SELECT ','+ FieldB FROM TableName a 
WHERE b.FieldA = a.FieldA FOR XML PATH('')),1 ,1, '') Members 
FROM TableName b 
GROUP BY FieldA; 

J'ai essayé d'ajouter des guillemets avant et après la virgule mais le format n'est pas correct.

Des suggestions?

Répondre

1

Il suffit d'ajouter ''''/'"' à la méthode XML + STUFF:

select distinct t1.FieldA, 
    STUFF((SELECT distinct ',' + ''''+ t2.FieldB + '''' 
     from yourtable t2 
     where t1.FieldA = t2.FieldA 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') data 
from yourtable t1; 

Rextester Demo

EDIT:

Ou utilisez QUOTENAME:

select distinct t1.FieldA, 
    STUFF((SELECT distinct ',' + QUOTENAME(t2.FieldB, '"') 
     from yourtable t2 
     where t1.FieldA = t2.FieldA 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') data 
from yourtable t1; 

Rextester Demo2

1

J'aime première suggestion mieux, mais voici une variante:

SELECT FIELDA, ISNULL([1],'') + ' ' + ISNULL([2], '') 
FROM 
    (SELECT FIELDA, ISNULL(QUOTENAME(FieldB, '"'),'') AS FIELDB 
    ,ROW_NUMBER() OVER (PARTITION BY fielda ORDER BY fielda) AS tbl 
    FROM yourtable)a 
PIVOT (MAX(fieldb) FOR tbl IN ([1],[2])) AS pvt