Announcement

Collapse
No announcement yet.

Eindeutiger View aus drei Tabellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eindeutiger View aus drei Tabellen

    Hallo,

    ich habe drei Tabellen (unter MSSQL Express)
    Tab1
    ProjNo |(Schlüssel) navarchar(5)
    ProjName |nvarchar(15)

    Tab2
    PID | int (schlüssel, auto)
    ProjNo | nvarchar(5)
    Beg1 | DateTime
    End1 | DateTime
    Sign1 |nvarchar(3)

    Tab3
    DID |int (schlüssel, auto)
    ProjNo |nvarchar(5)
    Beg2 |DateTime
    End2 |DateTime
    Sign2 |nvarchar(3)


    Tab1
    ProjNo|ProjName
    111 | Test1
    222 | Test2

    Tab2
    PID | ProjNo | Beg1 | End1 | Sign1
    1 | 111 | 01.01.00 | 02.01.00 | AAA
    2 | 111 | 01.02.00 | 02.02.00 | BBB
    3 | 222 | 01.02.00 | 03.02.00 | CCC

    Tab3
    DID | ProjNo | Beg2 | End2 | Sign2
    1 | 111 | 02.01.00 | 03.01.00 | AAA
    2 | 111 | 02.02.00 | 03.02.00 | BBB
    3 | 222 | 03.02.00 | 05.02.00 | CCC
    4 | 222 | 04.03.00 | 05.03.00 | DDD

    Ich möchte für die Projekte nur jeweils ein Ergebnis haben:

    ProjNo | Beg1 | End1 | Sign1 | Beg2 | End2 | Sign2
    111 | 01.02.00 | 02.02.00 | BBB | 02.02.00 | 03.02.00 | BBB
    222 | 01.02.00 | 03.02.00 | CCC | 04.03.00 | 05.03.00 | DDD

    Also aus Tab2 und Tab3 jeweils den Datensatz zur ProjNo mit der höchsten ID

    Ich versuche es so: (und lasse hier Datum und Signaturen weg)
    SELECT distinct Tab1.ProjNo, Tab2.PID , Tab3.DID
    FROM Tab1 INNER JOIN
    Tab2 ON Tab2.ProjNo = Tab1.ProjNo INNER JOIN
    Tab3 ON Tab3.ProjNo = Tab1.ProjNo
    group by Tab1.projNo, Tab2.pid, Tab3.did
    having (Tab2.pid = max(Tab2.pid)) and (Tab3.did = max(Tab3.did))

    Aber das Ergebnis ist: (nur für Proj 111)
    ProjNo | Beg1 | End1 | Sign1 | Beg2 | End2 | Sign2
    111 | 01.01.00 | 02.01.00 | AAA | 02.01.00 | 03.01.00 | AAA
    111 | 01.01.00 | 02.01.00 | AAA | 02.02.00 | 03.02.00 | BBB
    111 | 01.02.00 | 02.02.00 | BBB | 02.01.00 | 03.01.00 | AAA
    111 | 01.02.00 | 02.02.00 | BBB | 02.02.00 | 03.02.00 | BBB

    Mir fällt nichts mehr ein.

    Wie muss ich die Abfrage aufbauen, damit ich anstelle 4 Zeilen nur eine mit den neuesten Datensätzen aus Tab2 und Tab3 erhalte?!

    Oder geht das gar nicht und ich muss mein Tabellendesign überdenken??

    Vielen Dank im Voraus für jegliche Unterstützung
    Zuletzt editiert von Martin Hallerbach; 21.05.2008, 10:16. Reason: Tabellen gezeichnet für bessere Lesbarkeit
    ________________
    LG

    Martin

  • #2
    Ist geklärt.
    ich muss Unterabfragen erstellen anstatt
    having (Tab2.pid = max(Tab2.pid)) and (Tab3.did = max(Tab3.did)
    zu deklarieren.

    Danke an jeden der auch nur geschaut hat
    ________________
    LG

    Martin

    Comment

    Working...
    X