Abfrage wenn vorhanden dann

wobeni

Grünschnabel
Hallo,

ich habe die folgende Anforderung. 2 Tabellen mit folgendem Inhalt sind vorhanden.
Tabelle-1:
=======

ID Name1 - Name4 Strasse PLZ Ort
1 Willi Mustermann Musterstrasse 12345 Musterhausen
2 Max Müller Müllerstrasse 45678 Stuttgart
3 Willi Schmidt Schmitterstrasse 20 33456 Schmitten

Tabelle-2:
========
ID Anschriften-ID Strasse PLZ Ort
1 2000 Musterweg 10 12345 Musterort
2 100 Malerweg 30 56789 Mayen

Nun soll folgende Selektion erstellt werden. Aus der Tabelle-1 werden Informationen aus weiteren nicht aufgeführten Spalten ausgelesen. Als Anschrift soll allerdings folgende Vorgehensweise berücksichtigt werden. Die oberste Priorität für die Adressanschrift ist die Anschriften-ID '2000' aus der Tabelle-2. Wenn also für die ID: 1 aus Tabelle-1 eine Anschriften-ID: 2000 in der Tabelle-2 existiert, soll diese verwendet werden. Falls nicht soll als nächste Priorität die Anschriften-ID: 100 verwendet werden, falls diese auch nicht vorhanden ist, soll die Anschrift aus Tabelle-1 verwendet werden. Dies soll für alle Datensätze durchlaufen werden. Wie kann man das in eine bestehende Selektion einbauen ( evt. als Subselect )

Gewünschte Ausgabe für das Beispiel oben:
ID Name1 - Name4 Strasse PLZ Ort
1 Willi Mustermann Musterweg 10 12345 Musterort
2 Max Müller Malerweg 30 56789 Mayen
3 Willi Schmidt Schmitterstrasse 20 33456 Schmitten


Vielen Dank
 
Hallo,

ich weiß nicht ob ichs richtig verstanden habe in Tabelle2 können mehrere Einträge für eine ID vorhanden sein?
Beispiel:
Tabelle-2:
========
ID Anschriften-ID Strasse PLZ Ort
1 2000 Musterweg 10 12345 Musterort
1 100 Maurerweg 15 12555 Malersdorf
2 100 Malerweg 30 56789 Mayen

Dann könnte das ein Ansatz sein, ich kann leider nix testen habe gerade keine DB da. Evtl. hilft Dir das als Ansatz?

SQL:
select 
	ID
	, Name1-Name4
	, temp_table.Strasse
	, temp_table.PLZ
	, temp_table.Ort
from
	Tabelle1
left join 
	(
	  
	  
	  select 
	  	 ID
	  	 , Anschriften-ID 
	  	 , rang
	  	 , Straße
	  	 , PLZ
	  	 , Ort
	  from Tabelle2	 a  	 	
	  join
	  (
	  select
	  	ID 
	  	, max(Anschriften-ID) rang
	  from
	  	Tabelle2
	  group by
	  	ID	  	
	  ) b
	  on (a.ID = b.ID and a.Anschriften-ID = b.rang)
	
	) temp_table
on temp_table.ID = Tabelle1.ID
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück