Betrachten Sie:
%Vor%Ich kann eine Permutationstabelle für alle 3 Werte erstellen:
%Vor%Dies nutzt die Macht des kartesischen Produkts von SQL und eliminiert gleiche Werte.
OK.
Aber ist es möglich, diesen rekursiven Pseudo-CTE zu verbessern:
%Vor%
Damit wird dasselbe Ergebnis wie folgt erzielt:
Hinweis: Es gibt andere Lösungen in SO, die rekursive CTE verwenden, aber nicht auf Spalten verteilt sind, sondern String-Repräsentation der Permutationen
Ich habe versucht, das Los in einem CTE zu machen.
Allerdings ist es ein wenig schwierig, ein Rowset dynamisch neu zu definieren. Während die Aufgabe mit dynamischem SQL relativ einfach ist, ohne einige Probleme zu verursachen.
Obwohl diese Antwort möglicherweise nicht die effizienteste oder geradlinigste ist, oder sogar richtig in dem Sinne, dass es nicht alles CTE ist, kann es anderen eine Basis geben, von der aus zu arbeiten.
Um meinen Ansatz am besten zu verstehen, lesen Sie die Kommentare, aber es könnte sich lohnen, jeden CTE-Ausdruck nacheinander zu betrachten, indem Sie das darunter liegende Bit im Hauptblock ändern und den darunter liegenden Abschnitt auskommentieren.
%Vor%Viel Glück.
%Vor%Wie wäre es mit der Übersetzung von 1,2,3 in eine Spalte, die genau wie das Beispiel aussieht, von dem Sie ausgegangen sind, und den gleichen Ansatz verwenden?
%Vor%Wenn ich die Anfrage richtig verstanden habe, könnte das den Trick machen.
Und um es auf mehr Spalten auszuführen, müssen Sie nur die Quellen cte definition + pivot Spaltenliste hinzufügen.
Nun, ich weiß nicht, wie Sie Ihre 1 - n Werte weitergeben, damit es dynamisch ist, aber wenn Sie mir sagen, könnte ich versuchen, das Skript auch dynamisch zu bearbeiten.
Tags und Links sql-server recursion sql-server-2008-r2 common-table-expression