none
Zusammenführen von zwei Tabellen RRS feed

  • Frage

  • Ich möchte gerne zwei Tabellen zu einer zusammenführen. Leider finde ich keinen Ansatz:

    Lieferanten_Tabelle                    

    KEY        Lieferant             Artikel  Menge

    A1          111         XX          1

    B1           222         XX          1

    C1           333         XX          10

    D1          111         YY           5

    F1           222         YY           10

    Staffel_Tabelle

    KEY        Staffel

    A1          100

    A1          10

    A1          50

    A1          20

    A1          150

    B1           10

    B1           5

    C1           100

    D1          10

    D1          50

    D1          25

    F1           30

    Ergebnis soll sein:

    Lieferantenstaffel                                                                                                       

    Lieferant     Artikel  Menge   Staffel1    Staffel2    Staffel3    Staffel4    Staffel5

    111                  XX          1            10            20             50             100          150

    222                  XX          1              5            10                                         

    333                  XX        10           100                                                       

    111                  YY           5             10           25             50                          

    222                  YY         10             30      

    Kann mir da ggf. jemand von Euch helfen?

    Vielen Dank.                                                   

    Donnerstag, 1. März 2018 11:20

Antworten

  • Hi,

    probier es mal hiermit:

    SELECT *
    FROM
    (
        SELECT   l.[KEY], l.Lieferant, l.Artikel, l.Menge, s.Staffel,
                 'Staffel ' + CAST( ROW_NUMBER() OVER ( PARTITION BY s.[KEY] order by s.[KEY], s.Staffel ) AS varchar( 10 ) ) seq
        FROM     Lieferanten l
                 INNER JOIN Staffeln s ON l.[KEY] = s.[KEY]
    ) src
    PIVOT
    (
        MIN( Staffel )
        FOR seq in ( [Staffel 1], [Staffel 2], [Staffel 3], [Staffel 4], [Staffel 5] )
    ) piv;

    Das ergibt bei mir genau das von dir aufgezeigte Resultat.


    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


    Donnerstag, 1. März 2018 11:50
    Moderator

Alle Antworten

  • Hi,

    hilfreich für potientelle Antwortende ist es, wenn Du die CREATE TABLE Statements der Tabellen und die INSERT INTO Statements der Beispieldaten posten würdest.


    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

    Donnerstag, 1. März 2018 11:25
    Moderator
  • Bitte entschuldige meine Unwissenheit, aber ich weiß ehrlich gesagt gar nicht wie ich diese Lösung in TSQL erstellen sollte. Ich stehe komplett auf dem Schlauch.
    Donnerstag, 1. März 2018 11:28
  • Hi,

    nicht die Lösung, sondern die beiden Ausgangstabellen. Im SSMS rechte Maustaste auf die Tabelle -> Skript für Tabelle als -> CREATE TABLE ...


    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


    Donnerstag, 1. März 2018 11:34
    Moderator
  • Hi,

    probier es mal hiermit:

    SELECT *
    FROM
    (
        SELECT   l.[KEY], l.Lieferant, l.Artikel, l.Menge, s.Staffel,
                 'Staffel ' + CAST( ROW_NUMBER() OVER ( PARTITION BY s.[KEY] order by s.[KEY], s.Staffel ) AS varchar( 10 ) ) seq
        FROM     Lieferanten l
                 INNER JOIN Staffeln s ON l.[KEY] = s.[KEY]
    ) src
    PIVOT
    (
        MIN( Staffel )
        FOR seq in ( [Staffel 1], [Staffel 2], [Staffel 3], [Staffel 4], [Staffel 5] )
    ) piv;

    Das ergibt bei mir genau das von dir aufgezeigte Resultat.


    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


    Donnerstag, 1. März 2018 11:50
    Moderator
  • Hallo Stefan,

    vielen, vielen Dank für Deine Hilfe. Ich bin beeindruckt von Deinem Können.

    Deine Lösung ist super und klappt hervorragend.

    Viele Grüße

    Donnerstag, 1. März 2018 12:38
  • Hi,

    zur Erklärung lies dich mal in die PIVOT Funktionen von T-SQL ein. Mit dem Beispiel sollte es wahrscheinlich relativ einfach zu verstehen sein.


    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

    Donnerstag, 1. März 2018 15:03
    Moderator