CONCAT (Spalte) OVER (PARTITION BY ...)? Gruppenkontentierende Zeilen, ohne das Ergebnis selbst zu gruppieren

9

Ich brauche eine Möglichkeit, um eine Verkettung aller Zeilen (pro Gruppe) in einer Art Fensterfunktion vorzunehmen, so wie Sie COUNT(*) OVER(PARTITION BY...) ausführen können und die Gesamtanzahl aller Zeilen pro Gruppe wird für jede bestimmte Gruppe wiederholt. Ich brauche etwas ähnliches, aber eine String-Verkettung aller Werte pro Gruppe, die in jeder Gruppe wiederholt wird.

Hier sind einige Beispieldaten und mein gewünschtes Ergebnis, um mein Problem besser zu veranschaulichen:

%Vor%

Und hier ist was ich brauche (das gewünschte Ergebnis):

%Vor%

Hier ist der wirklich knifflige Teil dieses Problems:

Meine besondere Situation verhindert, dass ich zweimal auf die gleiche Tabelle verweisen kann (ich mache das tatsächlich in einem rekursiven CTE, so dass ich keinen Selbsteintrag des CTE machen kann oder einen Fehler erzeugt).

Ich bin mir vollkommen bewusst, dass man etwas tun kann wie:

%Vor%

Wie Sie jedoch sehen, referenziert tbl zweimal in der Abfrage .

Ich kann% cos_de% nur einmal referenzieren , weshalb ich mich frage, ob die Gruppenverkettung mit Fenstern möglich ist (ich bin seit TSQL etwas neu in TSQL) Ich komme von einem MySQL Hintergrund, also nicht sicher, ob so etwas getan werden kann.)

Tabelle erstellen:

%Vor%     
Zane Bien 19.08.2012, 03:12
quelle

2 Antworten

1
%Vor%     
Maksud 07.05.2015 13:13
quelle
0

Ich habe versucht, den reinen CTE-Ansatz zu verwenden: Welches ist der beste Weg, den String-Wert mithilfe einer Spalte aus einer Tabelle mit Zeilen mit derselben ID zu erstellen? Ich denke, es ist schneller

Aber der Benchmark sagt etwas anderes, es ist besser, die Ergebnisse der Unterabfrage (oder CROSS APPLY ) von XML PATH zu verwenden, da sie schneller sind: Welches ist der beste Weg, um den String-Wert mit Hilfe von Spalte aus einer Tabelle mit Zeilen mit derselben ID?

    
Michael Buen 19.08.2012 07:37
quelle