none
Zusammenführen von Datensätzen unterschiedlichen Datums aus verschiedenen Tabellen RRS feed

  • Frage

  • Hallo zusammen,

    ich habe eine Frage zum Zusammenführen von Datenzeilen. Folgende Situation ist gegeben: Es gibt mehrere Tabellen in denen verschiedene Daten gespeichert werden z.B. so (vereinfacht, die Tabellen haben noch mehr Spalten und unterschiedliche Strukturen):

    Tabelle A:

    DateTime                    Wert1   Wert2   Wert3

    ---------------------------------------------------

    25.07.2010 15:00:00   12,34    3,45     1,23

    25.07.2010 15:10:00   12,50    4,54     1,67

    Tabelle B:

    DateTime                    Wert1   Wert2   Wert3

    ---------------------------------------------------

    25.07.2010 15:00:00   15,00    4,11     9,59

    25.07.2010 15:05:00   17,37    5,38     9,43

    25.07.2010 15:15:00   16,77    5,58     9,28

    Ich möchte jetzt Datensätze so zusammenführen, dass ich z.B. alle Wert1 aus Tabelle A und Wert3 aus Tabelle B zusammenführe. Das Ergebnis sollte dann so aussehen:

    Ergebnis:

    DateTime                    Wert1   Wert3

    ------------------------------------------

    25.07.2010 15:00:00   12,34    9,59

    25.07.2010 15:05:00   NULL     9,43

    25.07.2010 15:10:00   12,50    NULL

    25.07.2010 15:15:00   NULL     9,28

    Es müssen also Werte mit gleichem DateTime in einer Zeile zusammen kommen, aber auch gleichzeitig Werte die nicht das gleiche DateTime haben hinzugefügt werden. Und wenn es für einen Zeitpunkt keinen Wert gibt, so soll dort NULL stehen. Ich bin leider kein Fachmann in SQL und hoffe auf Eure geschätzten Hinweise zur Lösung dieses Problems.

    Vielen Dank,

    Manfred

    Freitag, 5. Juli 2013 13:25

Antworten

  • Hallo Manfred,

    das geht über einen FULL OUTER JOIN.

    Set Nocount On;
    Declare @a as Table(Datum datetime, Wert1 decimal(5,2), Wert2 decimal(5,2), Wert3 decimal(5,2));
    Declare @b as Table(Datum datetime, Wert1 decimal(5,2), Wert2 decimal(5,2), Wert3 decimal(5,2));
    
    Insert into @a(Datum, Wert1, Wert2, Wert3) values('20100725 15:00:00', 12.34, 3.45, 1.23);
    Insert into @a(Datum, Wert1, Wert2, Wert3) values('20100725 15:10:00', 12.50, 4.54, 1.67);
     
    Insert into @b(Datum, Wert1, Wert2, Wert3) values('20100725 15:00:00', 15.00, 4.11, 9.59);
    Insert into @b(Datum, Wert1, Wert2, Wert3) values('20100725 15:05:00', 17.37, 5.38, 9.43);
    Insert into @b(Datum, Wert1, Wert2, Wert3) values('20100725 15:15:00', 16.77, 5.58, 9.28);
    
    Select coalesce(a.Datum, b.Datum) as Datun,  a.Wert1, b.Wert3
    from @a as a 
    Full outer Join @b as b
    on a.Datum = b.Datum
    order by 1;


    Einen schönen Tag noch,
    Christoph Muthmann
    Microsoft SQL Server MVP - Blog

    Freitag, 5. Juli 2013 13:36

Alle Antworten

  • Hallo Manfred,

    das geht über einen FULL OUTER JOIN.

    Set Nocount On;
    Declare @a as Table(Datum datetime, Wert1 decimal(5,2), Wert2 decimal(5,2), Wert3 decimal(5,2));
    Declare @b as Table(Datum datetime, Wert1 decimal(5,2), Wert2 decimal(5,2), Wert3 decimal(5,2));
    
    Insert into @a(Datum, Wert1, Wert2, Wert3) values('20100725 15:00:00', 12.34, 3.45, 1.23);
    Insert into @a(Datum, Wert1, Wert2, Wert3) values('20100725 15:10:00', 12.50, 4.54, 1.67);
     
    Insert into @b(Datum, Wert1, Wert2, Wert3) values('20100725 15:00:00', 15.00, 4.11, 9.59);
    Insert into @b(Datum, Wert1, Wert2, Wert3) values('20100725 15:05:00', 17.37, 5.38, 9.43);
    Insert into @b(Datum, Wert1, Wert2, Wert3) values('20100725 15:15:00', 16.77, 5.58, 9.28);
    
    Select coalesce(a.Datum, b.Datum) as Datun,  a.Wert1, b.Wert3
    from @a as a 
    Full outer Join @b as b
    on a.Datum = b.Datum
    order by 1;


    Einen schönen Tag noch,
    Christoph Muthmann
    Microsoft SQL Server MVP - Blog

    Freitag, 5. Juli 2013 13:36
  • Hallo Christoph,

    vielen Dank, das funktioniert! Werde nächste Woche eingehende Test's damit durchführen.

    Schönes WE,

    Manfred

    Freitag, 5. Juli 2013 14:25