[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Mar 2017
    Beiträge
    12

    SQL Selektion u. Ausgabe von Zeilen

    Hallo zusammen,

    ich möchte über eine SQL-Abfrage eine neue Ausgabe erzeugen welche am Ende pro Kunde immer nur einen und zwar den letzten aktuellen Satz ausgeben soll - ich habe jedoch noch keine Möglichkeit gefunden, diese per SQL zu lösen.

    Im folgenden Beispiel sind die beiden Dateien 1+2 mittels eines INNER JOIN miteinander verknüpft -

    SELECT
    -- Spalten
    A.KDNR AS KONTO,
    MAX(CAST(SUBSTR(B.GEJA, 1, 4) AS DECIMAL)) AS JAHR,
    B.EIWT AS WERT
    -- Tabellen
    FROM "DATEI1" A
    Inner Join "DATEI2" B ON A.KDNR = B.KDNR
    -- Zeilenauswahl
    WHERE ((A.KZAB = 3))
    -- Sortierspalten
    GROUP BY A.KDNR, B.GEJA, B.EIWT
    -- Sortierspalten
    ORDER BY A.KDNR, B.GEJA DESC


    KONTO JAHR WERT
    ----- ------- ---------------
    60001 2.014 57.677,00 < z.B.
    60004 1.996 4.729,45 < z.B.
    60004 1.995 9.458,90
    60004 1.994 4.729,45
    60005 2.013 2.275,00 < z.B.
    60005 2.011 43.650,00
    60005 2.010 37.680,00
    60005 2.009 27.840,00
    60006 2.009 100.260,00 < z.B.
    60006 2.008 259.596,00
    60006 2.007 133.056,00
    60006 2.006 128.160,00
    60006 2.005 62.784,00
    60006 2.003 40.813,00

    ich benötige aus Datei2 immer nur den Satz mit der letzten/neuesten Jahreszeile, funktioniert also nicht?!

    Im 2ten Beispiel sind die beiden Dateien 1+2 mittels eines RIGHT OUTER JOIN miteinander verknüpft -

    SELECT
    -- Spalten
    A.KDNR AS KONTO,
    MAX(CAST(SUBSTR(B.GEJA, 1, 4) AS DECIMAL)) AS JAHR,
    SUM(B.EIWT) AS WERT
    -- Tabellen
    FROM "DATEI1" A
    Right Outer Join "DATEI2" B ON A.KDNR = B.KDNR
    -- Zeilenauswahl
    WHERE ((A.KZAB = 3))
    -- Sortierspalten
    GROUP BY A.KDNR
    -- Sortierspalten
    ORDER BY A.KDNR, B.GEJA DESC


    KONTO JAHR WERT
    ----- ------- -------------------
    60001 2.014 57.677,00
    60004 1.996 18.917,80
    60005 2.013 292.890,89
    60006 2.009 1.007.442,17

    hier stimmen zwar die letzten/neuesten Zeilen mit der Jahreszahl, die Werte stimmen jedoch nicht, da diesse aufsummiert werden!!

    Was und wie kann ich nun vorgehen damit ich zu meinem gewünschten Resultat gelange - nun möchte ich euch hier um eure Hilfe bitten - VIELEN DANK im voraus!!

    Liebe Grüße
    MiMarkow

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Mehrere Fehler:
    Wenn du "Max(B.GEJA)" verwendest, kannst du nicht einfach im Group by B.GEJA verwenden, das sind verschiedene Ausdrücke.
    Ausdrücke im Select sind im Group by zu wiederholen.

    Hier empfehle ich dann eine partielle derived Table für den Join:

    select a.kdnr as konto, b.geja, b.eiwt
    from dateia a
    , lateral
    (select geja, eiwt from dateib b
    where a.kdnr = b.kdnr
    order by geja desc
    fetch first 1 rows only
    )
    where ...
    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
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von MiMarkow Beitrag anzeigen
    ... und zwar den letzten aktuellen Satz ausgeben soll ...
    Was ist denn "der letzte"? SQL kennt keine sequentielle Verarbeitung (kann man höchstens mit Funktion RRN drumherumwürgen, kostet aber Leistung)

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    @Dieter
    Im Raten warst du da aber schon mal besser...
    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

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    @Baldur:
    ... meinst Du, das wär schon raus, wer besser geraten 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/

  6. #6
    Registriert seit
    Mar 2017
    Beiträge
    12
    Hallo zusammen,

    zu allererst vielen Dank an Herrn Fuerchau -

    dieser Tipp/Vorschlag funktionert, habe es hinbekommen!!

    SELECT A.KDNR,
    CAST(SUBSTR(B.GEJA, 1, 4) AS DECIMAL) AS Jahr,
    B.EIWT
    FROM "LIB"."DATEI1" A,
    LATERAL (SELECT GEJA, EIWT from "LIB"."DATEI2" B
    WHERE A.KDNR = B.KDNR
    ORDER BY GEJA DESC
    FETCH FIRST 1 ROWS ONLY ) B
    WHERE A.BTRK = 1


    Nun aber eine weitere Frage dazu und zwar kann man in der Regel die iSeries SQL-Anweisung(en) in MS-Query einbinden, diese jedoch läuft auf einen Fehler - "Tabelle 'LITERAL' konnte nicht hinzugefügt werden"?!?!

    Vielleicht kann mir bitte hierfür auch jemand weiterhelfen - vielen Dank!!

    Liebe Grüße
    MiMarkow

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... am einfachsten legt man sich da auf der AS/400 eine View an.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Mar 2017
    Beiträge
    12
    ... und wie soll dieser bitte aussehen - DDS Source?!

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... nix DDS! SQL! create view as select ....
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    wobei du dann allerdings den where rauslasten solltest.
    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

  11. #11
    Registriert seit
    Mar 2017
    Beiträge
    12
    ... verstehe ich jetzt nicht ganz?!

    Das Problem oder mein Wunsch ist derjenige, dass über Excel die Daten immer aktuell zur Verfügung stehen, d.h. wird die Funktion über "Daten" - "Aktualisieren" (= MS-Query SQL-Anweisung) ausgelöst, müssen im Excel-Blatt die aktuellen Daten zur Verfügung stehen.

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... im MS Query steht dann select from myView where! Wo ist das Problem???
    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. Ausgabe in MS-Excel
    By rr2001 in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 09-03-15, 11:32
  2. Antworten: 2
    Letzter Beitrag: 10-03-05, 16:50
  3. Ausgabe von "Seite x von y"
    By JobstT in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 05-02-03, 13:29
  4. #6252 T12 Stahlbanddrucker (1200 Zeilen/Min)
    By pbock in forum NEWSboard Server & Hardware Markt
    Antworten: 0
    Letzter Beitrag: 02-12-02, 10:01
  5. Ausgabe UTF8
    By Dirschl in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 23-10-02, 11:52

Berechtigungen

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