J'ai une requête simple qui s'exécute dans SQL 2008 et utilise une fonction d'agrégation CLR personnalisée, dbo.string_concat qui agrège une collection de chaînes.Comment écrire élégamment un ORDER BY (qui n'est pas valide dans une requête inline) mais nécessaire pour agréger GROUP BY?
J'ai besoin des commentaires classés séquentiellement d'où l'exigence ORDER BY.
La requête que j'ai a une instruction TOP affreuse pour permettre à ORDER BY de fonctionner pour la fonction d'agrégat, sinon les commentaires ne seront pas dans un ordre particulier quand ils sont concaténés par la fonction.
Voici la requête en cours:
SELECT ID, dbo.string_concat(Comment)
FROM (
SELECT TOP 10000000000000 ID, Comment, CommentDate
FROM Comments
ORDER BY ID, CommentDate DESC
) x
GROUP BY ID
est-il une façon plus élégante de réécrire cette déclaration?
Je ne pense pas que cela fonctionnera, car ORDER BY est la dernière chose qui se produit lorsque la requête est exécutée. La façon dont je le comprends est qu'il a besoin de choses commandées avant de les grouper. – womp
Oui, j'ai besoin que la commande soit exécutée avant le groupe afin que les données agrégées soient ordonnées correctement. En substance, la fonction de concatation produira une liste de commentaires ordonnée dans le temps sous la forme d'un grand varchar (max). – Jafin
Ah, ma mauvaise, j'ai mal compris ce que vous essayiez d'accomplir. – fyjham