Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

flexibles Where-Statement?

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von ehoeg, 1 März 2017.

  1. ehoeg

    ehoeg Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. ehoeg

    ehoeg Neuer Benutzer

    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
     
    akretschmer gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden