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

Hilfe bei Select Abfrage ( Fallunterscheidung)

Dieses Thema im Forum "Oracle" wurde erstellt von skyerjoe, 8 September 2016.

  1. skyerjoe

    skyerjoe Aktiver Benutzer

    Hallo miteinander,

    Ich Probleme eine Select Abfrage effizient so zu gestalten, dass ich alle Möglichkeiten abdecken kann.

    Es ist ähnlich wie bei meinem anderen Select doch dazu später mehr:

    Hier ist mal der Select sehr stark gekürzt von den Select Feldern her aber mit allen relevanten Daten:

    Code:
    select
    relfba.ANR,
    RELZTSPE.Sprache as lang1,
    RELZTZB.Sprache as lang2,
    RELZTLB.Sprache as lang3
    from infor.relfba
    inner join infor.relacp relacp on
    relfba.MNR = relacp.MNR
    left outer join  infor.reltext reltext on
    relfba.textnr = reltext.TEXTNR
    left outer JOIN INFOR.RELZTLB RELZTLB
    ON (RELACP.TEXT0 = RELZTLB.ZTKEY)
    left outer JOIN INFOR.RELZTSPE RELZTSPE
    ON (RELACP.TEXT1 = RELZTSPE.ZTKEY)
    left outer JOIN INFOR.RELZTZB RELZTZB
    ON (RELACP.ZBED = RELZTZB.ZTKEY)
    --AND RELZTSPE.Sprache = 'de'
    AND RELZTZB.Sprache = 'de'
    --AND RELZTLB.Sprache = 'de'
    Da dieser Code sich doch relativ and diesem Problem orientiert, habe ich den mal probiert in diesen zu integrieren.


    Code:
    SELECT t.*
    FROM (
    SELECT
    ROW_NUMBER () OVER (
    PARTITION BY relfba.UTNR
    ORDER BY relfba.ANR,
    ( CASE RELZTZB.Sprache WHEN N'' || 'de' THEN 1 WHEN N'' || 'us' THEN 2 ELSE 9 END )
    ) AS rnk,
    ( CASE RELZTZB.Sprache WHEN N'' || 'de' THEN 1 WHEN N'' || 'us' THEN 2 ELSE 9 END ) as case,
    relfba.ANR,
    RELZTSPE.Sprache as lang1,
    RELZTZB.Sprache as lang2,
    RELZTLB.Sprache as lang3
    from infor.relfba
    inner join infor.relacp relacp on
    relfba.MNR = relacp.MNR
    left outer join  infor.reltext reltext on
    relfba.textnr = reltext.TEXTNR
    left outer JOIN INFOR.RELZTLB RELZTLB
    ON (RELACP.TEXT0 = RELZTLB.ZTKEY)
    left outer JOIN INFOR.RELZTSPE RELZTSPE
    ON (RELACP.TEXT1 = RELZTSPE.ZTKEY)
    left outer JOIN INFOR.RELZTZB RELZTZB
    ON (RELACP.ZBED = RELZTZB.ZTKEY)
    where saint =  '10'
    --AND RELZTSPE.Sprache = 'de'
    AND RELZTZB.Sprache = 'de'
    --AND RELZTLB.Sprache = 'de'
    ) t
    WHERE t.rnk = 1
    -- and company = '10387'
    ORDER BY t.ANR
    Glaube das müßte soweit hinhauen...

    Das Problem ist nur, dass diesmal ich keine ID zur hand habe wie bei der anderen Abfrage die ich als where Klausel benutzen kann und die Datensätze mit sämtlichen Kombinationen an Sprachen auftreten können.

    Folglich bräuchte ich eine IF then Abfrage mit else Funktion für jede Sprachkombination.

    RELZTSPE.Sprache = 'de'; 'us'; 'de'; 'de'; 'de' ; 'us'; 'us'; 'us' ;
    RELZTZB.Sprache = ' de'; 'us' ; 'us' ; 'de' ; 'us' ; 'de'; 'de'; 'us';
    RELZTLB.Sprache = 'de' ; 'us' ; 'us' ; 'us' ; 'de' ; 'de'; 'us' ; 'de'; .... müßten alle sein oder ... ( eine Abfrage ist immer eine vertikale Spalte)​

    wie krieg ich das mit eine meine Unterabfrage rein ?

    geht das überhaupt irgendwie ?

    grüße john
     
  2. ukulele

    ukulele Datenbank-Guru

    *Bahnhof*

    Das einzige was ich verstehe ist das in er Spalte RELZTSPE.Sprache ein Wert steht. Besteht dieser Wert jetzt aus einer Liste von Werten? Wie sollen diese Werte weiter verwendet werden und warum sind sie nicht normalisiert?
     
  3. skyerjoe

    skyerjoe Aktiver Benutzer

    Hallo ukulele

    Nein es gibt immer einen Wert von 3 Spalten in einem Datensatz und der kann immer unterschiedlich sein.

    RELZTSPE.Sprache
    RELZTZB.Sprache
    RELZTLB.Sprache

    Hier mal kurz ein Bild in Excel da sieht man es denke ich ganz gut.

    excel-lang.png

    Normalisierung... denke du meinst warum das nicht einheitlich ist, tja was soll ich sagen es wurde von unserem Verkauf nie drauf geachtet und irgendwann fliegts einem um die Ohren.

    Hoffe das ich es jetzt besser beschrieben habe

    grüße john
     
  4. ukulele

    ukulele Datenbank-Guru

    Okay immerhin nur ein Wert je Spalte in drei Spalten. Es gibt also 8 Kombinationen, die kannst du natürlich auch alle einzeln per IF abfragen. Aber was genau willst du prüfen?
     
  5. skyerjoe

    skyerjoe Aktiver Benutzer

    Hallo Ukulele

    eigentlich alle 8 Zustände reihenfolgenmäßig nach einem Schlüssel ( also in etwas if de,de,de, than go to next, else if us,us,us than go to next else usw... )
    also man muss eigentlich schauen das die Zustände der Reihe nach abarbeitet.

    Aber... ich habe jetzt mal mit einem Kollegen nochmal gesprochen evtl. schaffen wir es die M.A zu verdonnern die Datensätze anzupassen das wir nur eine Normlisierung erreichen.... ich melde mich wieder wenn ich weiss ob das machbar ist vom Zeitaufwand etc...

    grüße john
     
  6. ukulele

    ukulele Datenbank-Guru

    Ansonsten sehe ich auch nur die Möglichkeit mit einer CASE-Schleife alle Zustände zu durchlaufen, so wild ist die Syntax ja nicht. (CASE WHEN spalte1 = x AND spalte2 = x AND spalte3 = x THEN...
     
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