none
T-Sql (Multi Join) RRS feed

  • Frage

  • Hallo,

    ein besser Titel ist mir leider nicht eingefallen aber ich denke, dass sicherlich eine elegante T-SQL Möglichkeit existiert, mein folgendes Problem zulösen.

    Eine Abfrage/View/Tabelle  gibt folgende drei Spalten zurück:

    Tag |id |Feld
    1;12;Werner
    1;12;Hans
    1;12;Maria
    1;13;Peter
    2;12;Fritz
    2;12;Dieter
    2;14;Sonja

    Jetzt soll folgendes passieren: Spalte 1 und Spalte 2 sollen grupperiert werden und der Inhalt in Spalte 3 soll zusammengefaßt werden (alles in einem Datensatz), also so:

    Tag |id |Feld
    1;12;Werner-Hans-Maria
    1;13;Peter
    2;12;Fritz-Dieter
    2;14;Sonja

    Die Anzahl Gruppierungselemente sind also unterschiedlich. Zuerst dachte ich, das läßt sich mit dem PIVOT Befehl umsetzen, habe mich aber getäuscht :)

    Vielen Dank im Voraus für Eure Unterstützung

    Gruß




    Dienstag, 25. Oktober 2016 11:29

Antworten

  • Hi,

    lt. MSDN sollte zumindest das hier funktionieren.

    SELECT   DISTINCT
             ta.Tag,
             ta.id,
             Feldinhalte =
             STUFF
             (
                 (
                     SELECT '-' + Feld
                     FROM   DeineTabelle ti
                     WHERE  ti.Tag = ta.Tag AND ti.id = ta.id
                     FOR XML PATH( '' )
                 ), 1, 1, ''
             )
    FROM     DeineTabelle ta
    ORDER BY ta.Tag,
             ta.id

    "Funktioniert nicht" ist aber leider nichts, mit dem man was anfangen könnte. Kommt eine Fehlermeldung? Falls ja, welche genau?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 25. Oktober 2016 13:20
    Moderator

Alle Antworten

  • Hi,

    probier es mal hiermit:

    SELECT   DISTINCT
             ta.Tag,
             ta.id,
             Feldinhalte =
             STUFF
             (
                 (
                     SELECT '-' + Feld
                     FROM   DeineTabelle ti
                     WHERE  ti.Tag = ta.Tag AND ti.id = ta.id
                     FOR XML PATH( '' ), TYPE
                 ).value( '.', 'NVARCHAR(MAX)' ), 1, 1, ''
             )
    FROM     DeineTabelle ta
    ORDER BY ta.Tag,
             ta.id
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 25. Oktober 2016 11:48
    Moderator
  • Habe ich mal versucht umzusetzen, funktionierte aber nicht. ich nutze den SQL Server 2008 R2. Eventuell gibt es eine Alternative? Gruß
    Dienstag, 25. Oktober 2016 12:30
  • Hi,

    lt. MSDN sollte zumindest das hier funktionieren.

    SELECT   DISTINCT
             ta.Tag,
             ta.id,
             Feldinhalte =
             STUFF
             (
                 (
                     SELECT '-' + Feld
                     FROM   DeineTabelle ti
                     WHERE  ti.Tag = ta.Tag AND ti.id = ta.id
                     FOR XML PATH( '' )
                 ), 1, 1, ''
             )
    FROM     DeineTabelle ta
    ORDER BY ta.Tag,
             ta.id

    "Funktioniert nicht" ist aber leider nichts, mit dem man was anfangen könnte. Kommt eine Fehlermeldung? Falls ja, welche genau?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 25. Oktober 2016 13:20
    Moderator
  • Sorry, die Fehlerbeschreibung in meinem vorherigen Beitragb war wirklich unwürdig! :) Nichtsdestotrotz sieht es nun gut aus, vielen Dank für Deine Hilfe Gruß Oli
    • Bearbeitet Oli1969 Dienstag, 25. Oktober 2016 13:43
    Dienstag, 25. Oktober 2016 13:42