J'ai récemment découvert les expressions de tables communes récurrentes (CTE) en cherchant un moyen de construire une certaine vue de certaines données. Après avoir pris un moment pour écrire comment la première itération de ma requête fonctionnerait, je l'ai transformée en CTE pour regarder le tout se dérouler. J'ai été surpris de voir que le regroupement ne fonctionnait pas, alors je l'ai juste remplacé par un équivalent "Select TOP 1, ORDER BY". Je suis à nouveau surpris que « TOP » n'a pas été autorisé, et est venu à constater que toutes ces clauses ne sont pas autorisés dans la partie récursive d'un CTE:Pourquoi les CTE récursifs ne peuvent-ils pas utiliser les clauses de regroupement et autres?
- DISTINCT
- GROUP BY
- PRESENTANT
- TOP
- GAUCHE
- DROIT
- OUTER JOIN
Je suppose que j'ai 2 questions:
- Afin de mieux comprendre ma situation et SQL, pourquoi ne sont pas ces clauses autorisées?
- Si j'ai besoin de faire une sorte de récursion en utilisant certaines de ces clauses, est-ce ma seule alternative pour écrire une procédure récursive stockée?
Merci.
Les deux liens se réfèrent à la même page Web et je ne le recommanderais pas car il contient beaucoup d'incohérences et de bugs. Avez-vous vraiment exécuté des scripts? et le lire? Utilisez http://msdn.microsoft.com/en-us/library/ms175972(v=SQL.100).aspx à la place –
@ vgv8 - Oui, les deux liens sont à la même page Web - je faisais référence à la même page juste différente sections dans ma réponse. En outre, je demandais simplement à l'OP de voir l'exemple indiqué ici pour référence sur la façon d'utiliser le Group By. Je ne suis au courant d'aucune incohérence là pour les parties auxquelles je suis référencé mais si vous pouvez les mettre en évidence, cela vous aidera !! – InSane
En liant le script dans la section "C. Référencer une expression de table commune plus d'une fois" ne référence plus d'une fois le CTE. Les scripts suivants ne fonctionnent pas du tout puisqu'ils sont inexistants dbo.MyEmployees –