Existe-t-il une implémentation de la fonction STRAGG de Tom Kyte supportant SQL Server?

L'implémentation de la fonction STRAGG renvoie un résultat en tant que valeur de colonne unique. L'implémentation pour Oracle semble assez générique et peut être consommée pour différentes tables (et relations). Un comportement similaire peut-il être obtenu pour SQL Server. Une search sur le Web semble renvoyer uniquement des implémentations codées en dur et non generics. Avons-nous une solution connue pour le server Sql?

Il y a une bonne solution XML qui est largement utilisée. C'est plus simple si les strings que vous agrégez n'ont pas de strings XML-invalides ou XML-spéciales, et voici un exemple.

SELECT * FROM ( SELECT x AS [data()] FROM ( SELECT 'something' UNION ALL SELECT 'something else' UNION ALL SELECT 'something & something' ) y (x) FOR XML PATH('') ) z (final) 

Cet exemple est tiré du post de Tony Rogerson sur http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/07/06/871.aspx

Vous pouvez faire beaucoup plus que ce simple exemple montre. Vous pouvez spécifier l'ordre des éléments dans les agrégats (mettre ORDER BY dans la table dérivée), vous pouvez grouper et joindre pour get plus d'une ligne de résultat, vous pouvez changer les délimiteurs, etc. Voici quelques autres liens sur cette technique:

http://blogs.technet.com/wardpond/archive/2008/03/15/database-programming-the-ssortingng-concatenation-xml-sortingck-revisited-or-adam-is-right-but-we-can- fix-it.aspx

http://sqlblog.com/blogs/adam_machanic/archive/2009/05/31/grouped-ssortingng-concatenation-the-winner-is.aspx

Anith Sen a fait ce que je pense est la réponse la plus complète à cette question pour SQL Server dans son article http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact- sql / Concatenating Row Values ​​dans Transact-SQL 31 juillet 2008. Vous verrez qu'il existe un certain nombre de techniques différentes pour cela, mais je pense que l'astuce XML est la plus rapide. Avant SQL Server 2005, nous avons utilisé des variantes de l'astuce UPDATE que je montre comme un commentaire dans l'article.