flexibles Where-Statement?

ehoeg

Neuer Benutzer
Beiträge
2
Hallo

ich habe eine Tabelle mit Kundenddressen. Über das Feld BUSINESS_OBJECT_ID kann diese Addresse entweder eine Vertragsadresse(=2) oder eine Kundenadresse(=1) sein. In dem Feld OBJECT_ID steht entweder die ID der Kundetabelle oder der Vertragstabelle. In dem Feld CUSTOMER_ID steht immer die ID der Kundentabelle.

Eine Vertragsaddresse ist immer vorrangig vor einer Kundenadresse zu verwenden.

Nun die Tabelle:

Code:
ADDRESS_ID   CUSTOMER_ID   BUSINESS_OBJECT_ID   OBJECT_ID
204926        30004         1                   30004
204927        30004         2                   60001
204928        30006         1                   30006
204929        30008         2                   60002

Nun die Challenge:

Ich möchte eine Abfrage die

a) wenn Kundenadresse und Vertragsaddresse exisiteren nur die Vertragsaddresse zurück liefert (im Beispiel der Tabelle der 2. Datensatz)
b) wenn nur eine Vertragsadresse existiert, soll diese zurückgeben werden (im Beispiel der Tabelle der 4. Datensatz)
c) wenn nur eine Kundenadresse exisitert, soll diese zurückgegeben (im Beispiel der Tabelle der 3. Datensatz)

Im Grunde bräuchte ich je CUSTOMER_ID ein flexibles WHERE-Statement welches mir dann entweder
eine Vertragsadresse oder eine Kundenadresse selektiert.

Kann man sowas machen?
Wie stellt man geschickt Tabellen in dieses Forum ein?

Gruß
Eric
 
Werbung:
Challange accepted ;-)

Code:
test=*# select * from ehoeg ;
  a_id  | c_id  | b_o_id
--------+-------+--------
 204926 | 30004 |  1
 204927 | 30004 |  2
 204928 | 30006 |  1
 204929 | 30008 |  2
(4 rows)

test=*# select a_id, c_id, b_o_id from (select a_id, c_id, b_o_id, row_number() over (partition by c_id order by b_o_id desc) from ehoeg) foo where row_number = 1;
  a_id  | c_id  | b_o_id
--------+-------+--------
 204927 | 30004 |  2
 204928 | 30006 |  1
 204929 | 30008 |  2
(3 rows)

test=*#

(mit PostgreSQL gemacht)
Grüße aus Herford.
 
Werbung:
Hallo akretschmer

vielen Dank für das Statement, mit mssql geht's auch, allerdings muss man noch ein paar ... AS "name" hinzufügen.
Danke
Gruß
Eric
 
Zurück
Oben