none
SQL Abfrage Problem bezüglich einer Datenbankauswertung RRS feed

  • Frage

  • Hallo,

    ich habe ein SQL Abfrage Problem bezüglich einer Datenbankauswertung.

    Die Datenbank bestizt 2 Tabellen

    Tabelle 1) Name, Vorname, Geburtstag, PNummer

    Tabelle 2) PNummer, Ergebniss

    In der Spalte Ergebnis können diese Werte stehen (1a; 2b; 2n; 3a; 3f ;5 ;6).

    PNummer ist der Key zwischen den Tabellen (1 zu n (Tabelle 1 / Tabelle 2)). Eine Person ist eindeutig zu identifizieren, wenn der Name + Vorname + Geburtstag übereinstimmen.

    Eine Person kann mehrere Einträge in der Tabelle 2 besitzen. Ich muss nur herausfinden, welches der höchste Eintrag (bezieht sich immer auf die Zahl) für eine Person ist.

    Das Datenbankschema kann nicht geändert werden und besitzt redundante Daten. Da kann ich leider nichts editieren. 

    Danke für Eure Hilfe

    Stefan

    Montag, 22. Februar 2016 16:21

Antworten

  • Es ist schade, wenn so ein Thread im Sande verläuft. Leider haben wir auch nicht wirklich viele Informationen über die Tabellen erhalten.

    Hier mal ein alternativer Ansatz, der andere Sachen voraussetzt:

    -- Unter der Voraussetzung, dass PNummer nicht der Primary Key ist
    Declare @Tab1 as Table(Name varchar(20), Vorname varchar(20), Geburtstag date, PNummer int);
    Declare @Tab2 as Table(PNummer int, Ergebnis char(2));
    
    Insert into @Tab1(Name, Vorname, Geburtstag, PNummer) Values ('Mustermann', 'Max', '19800101', 1);
    Insert into @Tab1(Name, Vorname, Geburtstag, PNummer) Values ('Mustermann', 'Max', '19901010', 3);
    Insert into @Tab1(Name, Vorname, Geburtstag, PNummer) Values ('Mustermann', 'Ida', '19800102', 1);
    
    Insert into @Tab1(Name, Vorname, Geburtstag, PNummer) Values ('Mustermann', 'Tom', '19800102', 2);
    
    Insert into @Tab2(PNummer, Ergebnis) values (1, '1a');
    Insert into @Tab2(PNummer, Ergebnis) values (1, '1b');
    Insert into @Tab2(PNummer, Ergebnis) values (2, '2n');
    
    Insert into @Tab2(PNummer, Ergebnis) values (3, '4');
    Insert into @Tab2(PNummer, Ergebnis) values (3, '5');
    Insert into @Tab2(PNummer, Ergebnis) values (3, '6');
    
    Select Name, Vorname, Geburtstag, MAX(t2.Ergebnis) as Ergebnis_max
    from @Tab1 t1
    Inner Join @Tab2 t2
    on t1.PNummer = t2.PNummer
    group by Name, Vorname, Geburtstag
    order by Name, Vorname, Geburtstag;


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    • Als Antwort vorgeschlagen Christoph Muthmann Dienstag, 1. März 2016 12:40
    • Als Antwort markiert Aleksander Chalabashiev Mittwoch, 9. März 2016 09:00
    • Tag als Antwort aufgehoben SK3110 Donnerstag, 10. März 2016 09:22
    • Als Antwort markiert SK3110 Donnerstag, 10. März 2016 09:22
    Dienstag, 1. März 2016 12:30

Alle Antworten

  • Hallo Stefan,

    Hier mal ein Entwurf auf die schnelle.

    select t1.name, t1.vorname, t1.geburtstag, 
    (select max(t2.ergebnis) 
    from tabelle2 as t2 where t1.pnummer = t2.pnummer)
    from tabelle1 as t1


    Benjamin Hoch
    MCSE: Data Platform,
    MCSA: Windows Server 2012,

    Montag, 22. Februar 2016 20:02
  • Hallo Stefan, 

    wenn deine Frage hiermit beantwortet ist markiere bitte meinen Lösungspost als Antwort

    Danke sehr


    Benjamin Hoch
    MCSE: Data Platform,
    MCSA: Windows Server 2012,

    Dienstag, 1. März 2016 12:01
  • Es ist schade, wenn so ein Thread im Sande verläuft. Leider haben wir auch nicht wirklich viele Informationen über die Tabellen erhalten.

    Hier mal ein alternativer Ansatz, der andere Sachen voraussetzt:

    -- Unter der Voraussetzung, dass PNummer nicht der Primary Key ist
    Declare @Tab1 as Table(Name varchar(20), Vorname varchar(20), Geburtstag date, PNummer int);
    Declare @Tab2 as Table(PNummer int, Ergebnis char(2));
    
    Insert into @Tab1(Name, Vorname, Geburtstag, PNummer) Values ('Mustermann', 'Max', '19800101', 1);
    Insert into @Tab1(Name, Vorname, Geburtstag, PNummer) Values ('Mustermann', 'Max', '19901010', 3);
    Insert into @Tab1(Name, Vorname, Geburtstag, PNummer) Values ('Mustermann', 'Ida', '19800102', 1);
    
    Insert into @Tab1(Name, Vorname, Geburtstag, PNummer) Values ('Mustermann', 'Tom', '19800102', 2);
    
    Insert into @Tab2(PNummer, Ergebnis) values (1, '1a');
    Insert into @Tab2(PNummer, Ergebnis) values (1, '1b');
    Insert into @Tab2(PNummer, Ergebnis) values (2, '2n');
    
    Insert into @Tab2(PNummer, Ergebnis) values (3, '4');
    Insert into @Tab2(PNummer, Ergebnis) values (3, '5');
    Insert into @Tab2(PNummer, Ergebnis) values (3, '6');
    
    Select Name, Vorname, Geburtstag, MAX(t2.Ergebnis) as Ergebnis_max
    from @Tab1 t1
    Inner Join @Tab2 t2
    on t1.PNummer = t2.PNummer
    group by Name, Vorname, Geburtstag
    order by Name, Vorname, Geburtstag;


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    • Als Antwort vorgeschlagen Christoph Muthmann Dienstag, 1. März 2016 12:40
    • Als Antwort markiert Aleksander Chalabashiev Mittwoch, 9. März 2016 09:00
    • Tag als Antwort aufgehoben SK3110 Donnerstag, 10. März 2016 09:22
    • Als Antwort markiert SK3110 Donnerstag, 10. März 2016 09:22
    Dienstag, 1. März 2016 12:30
  • Vielen Dank für Eure Hilfe. Leider kann ich aus persönlichen Gründen mich erst jetzt melden und bei Euch für die gute Hilfe bedanken.

    Ich werde mich heute an meine Problemlösung setzen.

    Viele Grüße

    Stefan Kießig

    Donnerstag, 10. März 2016 09:25