Verschiedene Einträge aus mehreren zeilen zu einer zeile zusammenführen

nixfix

Benutzer
Beiträge
10
Hallo Forumsgemeinde,

stehe da vor einem Problem bei dem ich nicht mehr weiter weiß. Möchte gerne einen Datenstring aus mehreren Zeilen zu einem zusammenführen und diesen in Verbindung mit anderen Tabelleneinträgen ausgeben.
Leider fehlt mir hier im Forum ein wenig die Praxis wie ich das am besten darstelle aber ich versuchs mal so

Hier mal ein verkürztes Beispiel - Tabelle "test" mit 4 Spalten.

Proj | Nr | Txt | User
ABC | 01 | T1 | user1
ABC | 01 | T2 | user2
ABC | 02 | T3 | user1
BAC| 01 | T1 | user1
BAC | 01 | T2 | user2
CAB | 03 | T1 | user1

So sieht mal der Code bis jetzt aus.

DECLARE @combinedString VARCHAR(MAX)

SELECT @combinedString = COALESCE(@combinedString + ' ', '')
+ User + space(1) + Txt + space(1)
from test

SELECT @combinedString as StringValue

Das funktioniert mal soweit, und da kommt jetzt mal folgendes raus.
T1 user1 T2 user2 T3 user1 T1 user1 T2 user2 T1 user1

Ich hätte das aber gerne so, dass Proj und Nr jeweils separat mit dem jew. String dargestellt werden, also so
Proj | Nr | String
ABC | 01 | T1 user1 T2 user2
ABC | 02 | T3 user1
BAC | 01 | T1 user1 T2 user2
CAB | 01 | T1 user1

Das Thema ist jetzt nur wenn ich Select Proj, Nr, @combinedstring...…. from… mache kommt immer eine Fehlermeldung.

Ich hoffe das ist soweit verständlich :) Wie müsste ich vorgehen, dass ich das richtige Ergebnis erhalte?

Danke für eure Hilfe.

lg nixfix
 
Werbung:
Dein Ansatz ist etwas, naja schwer zu sagen, *plump*. Du machst ja keine richtige Abfrage sondern ballerst den ganzen Inhalt einer Tabelle in eine Zeichenkette (max 8000 Zeichen).

Richtiger wäre es zu gruppieren und aggregieren, zugegeben Texte zu aggregieren ist etwas garstig. In MSSQL kann man sich da mit FOR XML PATH behelfen.
Code:
SELECT Proj,Nr,
stuff((   SELECT   '; ' + t.[text] + space(1) + t.[user]
               FROM   test t
               WHERE   t.Proj = test.Proj
               AND t.Nr = test.Nr
               ORDER BY t.[text],t.[user]
               FOR XML PATH('')
               ),1,2,'') AS string
FROM test
GROUP BY Proj,Nr
 
Werbung:
Hallo ukulele,

herzlichen Dank für deine Hilfe. Das funktioniert jetzt genau wie es soll :)

Kann sein, dass mein Ansatzt etwas plump war. Genau das war ja der Grund warum ich hier im Forum nachgefragt und auf euer Expertenwissen gehofft habe.

lg nixfix
 
Zurück
Oben