Je cherche un moyen d'agréger des chaînes de caractères de différentes lignes en une seule ligne. J'ai l'intention de le faire à plusieurs endroits différents, et il serait bon de disposer d'une fonction pour faciliter cette opération. J'ai essayé des solutions utilisant COALESCE
y FOR XML
mais ils ne sont pas à la hauteur pour moi.
L'agrégation de chaînes de caractères donnerait quelque chose comme ça :
id | Name Result: id | Names
-- - ---- -- - -----
1 | Matt 1 | Matt, Rocks
1 | Rocks 2 | Stylus
2 | Stylus
J'ai jeté un coup d'oeil à Fonctions agrégées définies par CLR en remplacement de COALESCE
y FOR XML
mais apparemment SQL Azure n'est pas ne prend pas en charge les éléments définis par le CLR, ce qui est pénible pour moi, car je sais que le fait de pouvoir les utiliser résoudrait un grand nombre de mes problèmes.
Existe-t-il une solution de contournement ou une méthode optimale similaire (qui n'est peut-être pas aussi optimale que CLR, mais hé Je prends ce que je peux avoir) que je peux utiliser pour agréger mes affaires ?
0 votes
De quelle manière
for xml
ne fonctionne pas pour vous ?4 votes
Cela fonctionne, mais j'ai jeté un coup d'oeil au plan d'exécution et chaque
for xml
montre une utilisation de 25% en termes de performance de la requête (un gros de la requête !)2 votes
Il y a différentes façons de faire le
for xml path
la requête. Certaines sont plus rapides que d'autres. Cela peut dépendre de vos données mais celles qui utilisentdistinct
est, selon mon expérience, plus lent que l'utilisation degroup by
. Et si vous utilisez.value('.', nvarchar(max))
pour obtenir les valeurs concaténées, vous devez changer cela en.value('./text()[1]', nvarchar(max))
3 votes
Veuillez voter pour une solution native à ce sujet ici : connect.microsoft.com/SQLServer/feedback/details/1026336
0 votes
Il y a une analyse utile des performances ici : sqlperformance.com/2014/08/t-sql-queries/ Par ailleurs, l'approche XML échoue lorsque vos données contiennent des emojis ou des caractères de substitution, à moins que vous ne franchissiez un certain nombre d'étapes.
0 votes
Donc, @MikaelEriksson, dans mon commentaire ci-dessus, j'espère avoir répondu à votre question - au moins pour moi personnellement.