[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    79

    subselect ohne Ergebnis

    Hallo alle,

    es gibt Problem mit einem Subselect.

    Aufgabenstellung ist folgende:
    Tabelle-1: Auftragspositionen mit den Feldern Auftragsmenge und bereits gelieferte Menge.

    Tabelle-2: für die Auftragsposition gefertigte Teile.

    Frage ist was noch zu produzieren ist.
    Auftragsmenge - Liefermenge - Fertigung
    In Tabelle-2 können Sätze von Null bis n vorhanden sein.

    Ist nun kein Satz vorhanden bringt der Subselect einen Fehler und damit Abbruch. Rechnen sollte er aber
    Auftragsmenge - Liefermenge - NULL

    ExecSQL
    declare AUFGEScursor cursorfor
    select BDESS, BFB,
    sum( BBEAB - BFAME
    -(selectsum(casewhen STSTAT=1 then STAGME else STNEME end)
    from FESTCKS1
    where STBELE=AUFGES.BBELE and STPOSI=AUFGES.BPOSI
    and STSTAT < 5))
    from AUFGES
    where BTEIL <> 'E'and (BSCHK, BKETG) in
    (select KT3SHK, KT3REZ from KETTGA3 where KT3GAC=:Garnstring)
    or BTEIL <> 'E'and (BDESS, BFB) in
    (select SGDESS, SGFB from MASCHUS1 where SGGARN=:Garnnummer)
    groupby BDESS, BFB
    orderby BDESS, BFB ;

    ExecSQL
    open AUFGEScursor ;

    Resteinplanung = *Zero ;
    Dou sqlAUFGES <> *Zero ;

    ExecSQL
    fetchnextfrom AUFGEScursor into :BDESS, :BFB, :BBEAB ;

    Die Whereklausel behandelt die Suche nach einer bestimmten Materialkomponente.

    Danke für eure Hilfe.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Mit NULL läßt sich nicht rechnen.
    Wird NULL in einer Berechnung verwendet, ist das Ergebnis auch immer NULL.

    Wenn du ohne Satzanzeiger für NULL-Werte arbeitest, kannst du das nicht auswerten.

    Ansonten mußt du folgendes verwenden:

    coalesce((subselect ...), 0)

    Coalesce liefert den ersten Wert, der nicht NULL ist.
    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
    Sep 2005
    Beiträge
    79

    tiefe Verneigung

    Das war´s.
    Und sooooo einfach.

    Die ganze Literatur ersetzt nicht die Möglichkeit eine Frage zu stellen.

    Eine hab ich noch!
    Soll generell DISTINCT bei subselects für die IN-Klausel verwendet werden?

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    frei nach Theorie ist das Banane, weil SQL nach dem Kohl Prinzip arbeitet, aber ein Index für den Subselect sollte ohnehin da sein und dann kanns eher nutzen als schaden.

    mfg

    Dieter Bender

    Zitat Zitat von Armin Beitrag anzeigen
    Das war´s.
    Und sooooo einfach.

    Die ganze Literatur ersetzt nicht die Möglichkeit eine Frage zu stellen.

    Eine hab ich noch!
    Soll generell DISTINCT bei subselects für die IN-Klausel verwendet werden?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    DISTINCT zwingt immer dazu ALLE Sätze zu verarbeiten und dann doppelte rauszuschmeissen.
    Ohne DISTINCT entfällt das entfernen.
    Aber wer weiß, vielleicht merkt der Optimzer das sogar, weil für die IN-Prüfung ist das Zwischenergebnis egal.

    Was hier ggf. beschleunigen kann ist eher EXISTS, da hier bereits 1 Vorkommen ausreicht und nicht alle Sätze benötigt werden.

    Aber insofern hat Dieter (wie immer) Recht, dass Zugriffspfade wesentlich bedeutender sind.

    Insbesonders bei mandantenfähiger Software wird der Mandant gerne vergessen, da man ja nur einen hat
    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    manchmal lässt sich der exists oder where in durch einen join ersetzen und dann bleibt dem Optimizer fast kein Spielraum mehr Quatsch zu machen (selbst bei der ach so fantastischen neuen Query engine)

    mfg

    Dieter Bender

    Zitat Zitat von Fuerchau Beitrag anzeigen
    DISTINCT zwingt immer dazu ALLE Sätze zu verarbeiten und dann doppelte rauszuschmeissen.
    Ohne DISTINCT entfällt das entfernen.
    Aber wer weiß, vielleicht merkt der Optimzer das sogar, weil für die IN-Prüfung ist das Zwischenergebnis egal.

    Was hier ggf. beschleunigen kann ist eher EXISTS, da hier bereits 1 Vorkommen ausreicht und nicht alle Sätze benötigt werden.

    Aber insofern hat Dieter (wie immer) Recht, dass Zugriffspfade wesentlich bedeutender sind.

    Insbesonders bei mandantenfähiger Software wird der Mandant gerne vergessen, da man ja nur einen hat
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. kein Konstantes Ergebnis bei CRTDUPOBJ und Datei m.RI
    By deni87991 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 19-10-06, 13:55
  2. Subselect in case when auf DB2/400
    By Flo4711 in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 29-09-06, 17:31
  3. Wirres SQL Ergebnis
    By lyrics in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-08-06, 12:10
  4. CPYTOIMPF Ergebnis nicht lesbar
    By SUBUIS in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 09-05-06, 09:36
  5. Ist SUBSELECT auf DB2/400 aus MS-Query möglich
    By danloc in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 17-12-04, 11:24

Berechtigungen

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