J'ai besoin d'une fonction similaire à Oracle wm_concat code> dans SQL Server, qui renvoie une liste séparée par des virgules de tout champ que vous transmettez comme argument. Par exemple, dans Oracle,
select WM_CONCAT(first_name) from employee where state='CA'
6 Réponses :
afaik, vous devez le faire par vous-même. p>
Vous pouvez créer une fonction définie par l'utilisateur qui boucle avec un curseur les enregistrements de l'employé où l'état est ca et renvoie la concaténation de leurs noms. P>
Non, pas besoin d'utiliser un curseur du tout.
La réponse réelle: une question commune ici. Quelques recherches: p> pour le chemin XML p> li>
lignes de concession CSV [SQL-Server] p> li>
ul> p>
Vaut la peine de noter que cela n'est valable que pour SQL Server 2005 et ultérieurement. OP n'a pas indiqué la version de SQL Server qu'ils utilisent.
Vous pouvez remplacer la sous-chaîne avec la commande Stuff qui fonctionnera correctement sans avoir à connaître la longueur de la chaîne.
@Chris J: Je dirais que SQL 2K5 est une hypothèse raisonnable que 10 ans après SQL 2000 RTM et 2,5 versions plus tard
2147483647 Est-ce que votre ami ... Mémorisez-le.
Essayez ceci:
drop table #mike_temp go select * into #mike_temp from (select 'Ken' as firstname, 'CO' as state union all select 'Mike' as firstname, 'CO' as state union all select 'Tom' as firstname , 'WY' as state ) a go SELECT distinct state ,STUFF((SELECT ', ' + b.firstname FROM #mike_temp b where a.state = b.state FOR XML PATH('')),1, 2, '') AS CSVColumn from #mike_temp a
Essayez ceci
Ce n'est pas correct. Cela ne fonctionne pas dans SQL Server, car l'OP a souligné. Vous voudrez peut-être le supprimer ou le modifier si vous vouliez dire quelque chose de différent?
SELECT Field1, Substring(Field2, 2, LEN(Field2)) AS Field2 FROM ( SELECT [InnerData].Field1, (SELECT ',' + Field2 FROM @Fields WHERE Field1=[InnerData].Field1 FOR XML PATH('')) AS Field2 FROM ( SELECT DISTINCT Field1 FROM @Fields ) AS [InnerData] ) AS OuterData I got this Query from this LinkRefer this Link for more Clarification
dans SQL Server 2017 String_Agg Fonction a été ajouté
SELECT t.name as TableName ,STRING_AGG(c.name, ';') AS FieldList FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id GROUP BY t.name;