[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.047

    SQL Listagg systemfehler

    Moin zusammen

    mache ich ein
    PHP-Code:
    select F1F2
    listagg(digits(ttconcat '.' concat 
               digits
    (mmconcat '.' concat 
               digits
    (jj) , ', '
    from datei 
    group by f1
    f2 
    bekomme ich das gewünschte Ergebnis.

    in einem komplexen Statement

    PHP-Code:
    Select a1b1c1
    min((select listagg(digits(ttconcat '.' concat 
               digits
    (mmconcat '.' concat 
               digits
    (jj) , ', ')  
    from Datei 
    where f1
    =a1 and f2=a2 group by f1f2)) 
    from ...  (3 Dateien
    where ...(einfache Feld=Feld verknüpfung und Feld Wert Satzauswahl
    group by (alle Felder des select   
    order by 
    .... 
    bekomme ich einen SQL Systemfehler
    auch wenn ich das min( vor dem listagg weglasse und den select in den unteren Group packe, bekomme ich einen Systemfehler
    V7R5
    Sql kaputt?
    anders lösen?
    Idee?

    Danke!
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Jun 2001
    Beiträge
    2.047
    Ergänzung:
    Lasse ich im Listagg den Group by weg, läuft das Statement aber die Listagg Funktion geht nicht (nur ein Datum).

    Auch die Umstellung von
    min((select listagg(digits(tt) concat '.' concat
    digits(mm) concat '.' concat
    digits(jj) , ', ')
    from Datei
    where f1=a1 and f2=a2 group by f1, f2))
    auf
    min((select listagg(digits(tt) concat '.' concat
    digits(mm) concat '.' concat
    digits(jj) , ', ') within group( order by f1, f2)
    from Datei
    where f1=a1 and f2=a2 ))
    läuft, bringt aber nur einen Satz mit einem Datum anstatt einen Satz mit 3 oder 4 Datum
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.782
    Du machst ja ein Aggregat über ein Aggregat. Das das nicht klappt ist klar.
    Was klappen könnte wäre ein

    select min(myagg) from (
    select f1, f2, list_agg() as myagg
    from mytable
    group by f1, f2
    )

    Within Group dient nur der Sortierung innerhalb des List_Agg, da die Quelldaten unsortiert sein können.
    Und wenn du kein Group by hast, kann list_agg auch nichts aggregieren.

    Ansonsen kann list_agg auch einen CLOB generieren, der u.U. nicht aggregierbar ist, z.B. mit Min.
    In diesem Fall kannst du ggf. per substring(list_agg(..) from 1 for 10000) arbeiten.
    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

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    2.047
    select min(myagg) from (
    select f1, f2, list_agg() as myagg
    from mytable
    group by f1, f2
    )
    das hatte ich auch, aber ich brauche eine Verknüpfung --> where f1=a1 and f2=a2
    In deiner Version kennt er aber a1, a2 nicht

    Anstatt des min( könnte ich sen select ja in den group mit hinein nehmen (hatte ich versucht)
    Aber das knallt auch

    noch ne idee?
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.427
    Welcher SQL-Systemfehler?

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.782
    Mir erschließt sich die Logik für dein Min(List_agg(FX)) nicht,
    Durch List_agg(fx) within group(order by fx) steht der kleinste Wert immer am Anfang der Liste.
    Ein min(list_agg(fx)) wäre nur sinnvoll, wenn nicht nach f1+f2 gruppiert wird.
    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

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    2.047
    Wenn ich da kein Min oder Max mache, bekomme ich den Fehler,
    Spalte *N oder Ausdruck in select Liste nicht gültig

    Da das Statement unten ja einen Group auf alle Felder des select's hat.
    group by Myagg geht nicht,
    Group by listagg(... bricht ab

    @Pikachu
    SQL0901 Systemfeler mit CPF 4204 Interner Fehler im Abfrageprozessor
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.427
    Wo kommen hier f1 und f2 her?

    Zitat Zitat von Robi Beitrag anzeigen
    in einem komplexen Statement

    PHP-Code:
    Select a1b1c1
    min((select listagg(digits(ttconcat '.' concat 
               digits
    (mmconcat '.' concat 
               digits
    (jj) , ', ')  
    from Datei 
    where f1
    =a1 and f2=a2 group by f1f2)) 
    from ...  (3 Dateien
    where ...(einfache Feld=Feld verknüpfung und Feld Wert Satzauswahl
    group by (alle Felder des select   
    order by 
    .... 
    bekomme ich einen SQL Systemfehler

  9. #9
    Registriert seit
    Jun 2001
    Beiträge
    2.047
    aus Datei
    also der Datei, auf die das listagg läuft.

    a1 und a2 aus einer der anderen 4 Dateien die selektiert werden
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  10. #10
    Registriert seit
    Jun 2001
    Beiträge
    2.047
    Mist,
    jetzt mache ich zu begin ein
    With abcde as (select a1, a2, listagg(...) as PE

    und danach den o.g. select , selektiere PE, verknüpfe mit abcde und groupe zusätzlich PE

    und bekomme einen SQL-Systemfehler.
    Wobei der 1. select, mit dem listagg(..., alleine fehlerfrei läuft.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.782
    SQL erzeugt keine temporären Tabellen, also Ergebniss werden immmer bei Bedarf berechnet.
    Du musst da dann leider wohl ein Script erstellen:

    create newtable as (
    select a, b, list_agg() as listerg
    from mytable
    group by a, b
    ) with data

    Dann kannst du mit dem Ergebnis
    select a, b, min(listerg)
    from newTable
    group by a, b

    arbeiten.
    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

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.940
    Ich werde aus dem LISTAGG nicht schlau!
    Hast Du wirklich Tag, Monat, Jahr in 3 Zeilen oder alle in der gleichen Zeile?

    Wenn zweiteres der Fall wäre, ist der LISTAGG völlig überflüssig, d.h. also Min(Digits(TT) concat '.' concat Digits(MM) concat '.' concat Digits(YY) ist völlig ausreichend.

    Willst Du wirklich das Minimum von einem alphanumerischen Datum im Format Tag.Monat.Jahr?
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. SQL ROLLBACK im embedded SQL mit SQL Prozeduraufruf
    By harkne in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 28-08-24, 14:04
  2. WebService - SQL - SQL-Systemfehler - parallele Verarbeitung?
    By wti in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 12-04-22, 11:22
  3. Nachricht: [SQL0901] SQL-Systemfehler
    By mk in forum IBM i Hauptforum
    Antworten: 16
    Letzter Beitrag: 11-08-21, 08:40
  4. NET USE Systemfehler 64 Windows 10 Bitdefender
    By TheDevil in forum IBM i Hauptforum
    Antworten: 16
    Letzter Beitrag: 07-11-19, 12:52
  5. SQL-Funktionen STUFF, LISTAGG, ...
    By mahones in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 06-07-17, 16:47

Berechtigungen

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