[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2015
    Beiträge
    8

    Bitte um Hilfe

    Hallo liebe Forumsmitglieder,

    wie im Titel schon erwähnt benötige ich Hilfe.
    Aus der Wawi die auf der AS/400 läuft sollt ich eine Abfrage haben, aber ich komm nicht drauf.
    Die Abfrage soll ALLE Reihen aus der Tabelle yku und telregyku verwenden auf die die Bedingungen der "Where Klausel" zutrifft unabhängig davon ob der Vergleichsschlüssel (kdnr) in der letzten Tabelle ykexe vorkommt oder nicht.
    Jedoch wenn, muss geprüft werden ob euid='26' und ein='' ist nur dann darf aus der yku und der telregyku die Reihe verwendet werden.
    Ich hoffe Ihr könnt mir folgen.

    Anbei mal das was ich ausgeknobelt hab und nicht funktioniert.
    Ich hoffe es kann mir jemand sagen wo mein Denkfehler ist.

    select distinct
    b.kdnr,b.Kuna1,b.kuna2,c.anrede,
    c.vname, c.name, b.kustr, b.kuplz, b.kula, b.kuort, c.email, b.kuag,
    b.kukogr,b.KURG,b.KUBETO, a.euid, a.ein
    from yku b
    join telregyku c on b.kdnr=c.kdnr
    left join ykuexe a on ((a.ekdnr=b.kdnr and a.euid='26' and
    a.ein<>'J') and (a.ekdnr is NULL and a.ein is NULL ))
    join ykuexs d on b.kdnr=d.skdnr
    where b.kulv ='' and c.email is not NULL and
    b.kuag <> 'D1' and b.kulisp <> 'T' and d.suid='68'
    and c.FUNKTI <> 'MARKET1' and c.FUNKTI <> 'AP7VW01'
    order by b.kdnr

    Vielen herzlichen Dank schon im voraus und einen schönen Abend

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Das ist ja schon ein wenig unübersichtlich.
    Aber die Beschreibung ist etwas falsch!?

    Die YKUEXE soll unabhängig verwendet werden, also Left Join, aber gegen euid='26' und ein='' geprüft werden und nur dann wieder Daten aus den beiden Hauptdateien.
    Dies entspricht nun wieder einem "Inner Join" und dann wird die Abfrage doch wieder übersichtlich.
    Wenn aber die Daten aus YKU immer kommen soll, wenn in YKUEXE nichts ist so bleibt es bei dem Left Join.
    Aber die On-Bedingungen im Left join (a.ekdnr is NULL and a.ein is NULL ) ist falsch bz. unnötig, da im Left join dies so nicht vorkommen kann, dies ist eher was für die Where-Klausel.

    Ich denke da an folgendes

    select *
    from YKU b
    inner join TELREGYKU c on b.kdnr = c.kdnr
    left join YKUEXE a on b.kdnr = a.kdnr
    inner join YKUEXS d on d.kdnr = a.kdnr

    where b.kulv =''
    and c.email is not NULL -- <= Ist das Feld mit NULL definiert?
    and b.kuag <> 'D1'
    and b.kulisp <> 'T'
    and d.suid='68'
    and c.FUNKTI <> 'MARKET1'
    and c.FUNKTI <> 'AP7VW01'

    and coalesce(a.euid, '26') = '26' -- <= Falls vorhanden dann muss 26, sonst nimm 26 an
    and coalesce( a.ein, 'N') <>'J'

    order by b.kdnr
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jan 2015
    Beiträge
    8
    Schönen guten morgen,

    vielen Dank für die schnelle Antwort.
    Im Feld "email" ist entweder ein Wert vorhanden oder eben NULL (leer).
    Werd den Code mal testen und berichten.

    Grüße

  4. #4
    Registriert seit
    Jan 2015
    Beiträge
    8
    Hallo nochmal,

    also ich hab den Code getestet - leider kommt nicht ganz das raus was ich mir wünsche.
    Die Problematik an dem Ganzen ist wohl dass in der YKEXE die Verbindung (EKDNR) nicht unbedingt existiert.
    vielleicht hab ich mich auch etwas unverständlich ausgedrückt

    Nimm aus der YKU --> nimm aus der TELREGYKU alles was die selbe KDNR hat -->
    nimm aus YKUEXS jene welche SUID='68' und die selbe KDNR wie YKU und TELREGYKU haben -->
    schau nach ob EKDNR=KDNR in YKUEXE vorhanden und EUID='26' und EIN='' ansonsten bleib bei den bisherigen.

    Und da liegt die Problematik, die Abfrage kehrt nicht zu den ersten beiden Dateien zurück.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Deine Beschreibung ist immer noch zu kompliziert.
    Die YKUEXE wird per Left Join eingebunden, da dort Daten nicht vorhanden sein müssen.

    Was soll "ansonsten bleib bei den bisherigen" denn bedeuten?

    Meine Abfrage nimmt
    - alles aus den ersten beiden Dateien, wenn in YKUEXE kein Satz existiert
    - Nimm aus YKAU ff aber nur Daten, wenn ein Satz in YKUEXE vorhanden und euid='26' ist

    Ein Left Join liefert immer NULL, wenn kein Satz vorhanden ist.
    Coalesce berücksichtigt dies und meine Abfrage sagt dann, wenn in YKUEXE nichts ist, dann nimm in diesem Fall wieder EUID = '26' an um somit die Daten doch zu nehmen.

    Mach doch einfach mal ein Datenbeispiel.

    Die andere Möglichkeit ist, die Daten in 2 Schritten zu laden:

    -- Teil 1 = alle Daten, die keinen Satz in YKUEXE haben
    select *
    from YKU b
    inner join TELREGYKU c on b.kdnr = c.kdnr
    inner join YKUEXS d on d.kdnr = a.kdnr

    where b.kulv =''
    and c.email is not NULL -- <= Ist das Feld mit NULL definiert?
    and b.kuag <> 'D1'
    and b.kulisp <> 'T'
    and d.suid='68'
    and c.FUNKTI <> 'MARKET1'
    and c.FUNKTI <> 'AP7VW01'

    and not exists (select * from YKUEXE a where b.kdnr = a.kdnr)

    Union all
    -- Teil 2 alle Kunden die einen Satz in YKUEXE haben und der Inhalt dort passt
    select *
    from YKU b
    inner join TELREGYKU c on b.kdnr = c.kdnr
    inner join YKUEXE a on b.kdnr = a.kdnr
    inner join YKUEXS d on d.kdnr = a.kdnr

    where b.kulv =''
    and c.email is not NULL -- <= Ist das Feld mit NULL definiert?
    and b.kuag <> 'D1'
    and b.kulisp <> 'T'
    and d.suid='68'
    and c.FUNKTI <> 'MARKET1'
    and c.FUNKTI <> 'AP7VW01'

    and a.euid = '26'
    and a.ein <>'J'

    order by b.kdnr
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Eine Bitte und Danke schön aus gegebenem Anlaß
    By Isabella Pridat-Zapp in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 15-12-14, 17:10
  2. Hilfe AS/400
    By HEMPel84 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 18-09-02, 14:36
  3. Windows-Fragen bitte im NEWSboard windows stellen
    By Burgy Zapp in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 04-07-02, 14:01
  4. Verzeichnis laesst sich nicht loeschen..Bitte um Hilfe!
    By Bernhard in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 20-11-01, 07:39
  5. Hilfe bei AS 400
    By Fireball in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 22-08-01, 20:01

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •