1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

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

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von nixfix, 4 Dezember 2019.

  1. nixfix

    nixfix Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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
    
     
    Walter gefällt das.
  3. nixfix

    nixfix Benutzer

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden