2009-08-10 8 views
4

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 recherche sur le Web semble renvoyer uniquement des implémentations codées en dur et non génériques. Avons-nous une solution connue pour le serveur Sql?Existe-t-il une implémentation de la fonction STRAGG de Tom Kyte supportant SQL Server?

+0

duplication possible de [ListAGG dans SQLSERVER] (http://stackoverflow.com/questions/15477743/listagg-in-sqlserver) – Veverke

Répondre

6

Il existe une bonne solution XML qui est largement utilisée. C'est plus simple si les chaînes que vous agrégez n'ont pas de chaînes 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 de poste de Tony Rogerson à http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/07/06/871.aspx

Vous pouvez faire beaucoup plus que cet exemple simple 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 obtenir 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-string-concatenation-xml-trick-revisited-or-adam-is-right-but-we-can-fix-it.aspx

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

1

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/ Concaténation Row Valeurs dans Transact-SQL 31 juillet 2008. Vous verrez qu'il y a un certain nombre de techniques différentes pour le faire 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.

Questions connexes