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
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
Comment