[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Nov 2003
    Beiträge
    2.403
    Wenn ich jetzt nicht ganz daneben liege, erhältst du bei einer Spalte im GROUP BY maximal 1 Zeile je Wert in dieser Spalte. Welche Werte aus den anderen Spalten willst du haben, wenn es da unterschiedliche gibt, wie im Beispiel von Robi?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Das Hauptproblem ist bei Group By, dass du Aggregatfunktionen für die Felder benötigst, die nicht im Group by aufgelistet werden.
    Infolge dessen kannst du keinen "select * " verwenden.
    Du musst SQL schon genau mitteilen, was du willst:

    select F1 [, F2, ...], SUM(Fn) as Fn [AVG(Fn1), ...]
    from MyFile
    Group By F1 [, F2, ...]
    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
    Oct 2007
    Beiträge
    42

    Mein BSP

    Habe nun ein paar Select eingetragen... zum testen und es klappt leider nicht..

    Code:
    SELECT TPROD,         *von ITHL01 
               TTDTE,         *von ITHL01 
               IPROD,          *von IIML01 
               IDESC,          *von IIML01 
               VENDOR        *von AVML01 
    FROM BPCSF.ITHL01
     
    LEFT JOIN BPCSF.IIML01 
    ON TPROD = IPROD 
     
    LEFT JOIN BPCSF.AVML01
    ON IPROD = VENDOR
    Where TTDTE >= 20110331 
    and IITYP ='K'
    Da ist der Wurm drin.

    Fehlercode

    SQL-Status: 42703
    Vendorencode: -5001
    Nachricht: [SQL5001] Qualifikationsmerkmal für Spalte oder Tabelle ITHL01 nicht definiert. Ursache . . . . : Der Name ITHL01 wurde zur Qualifizierung eines Spaltennamens verwendet oder als Operand der Skalarfunktion RRN, HASHED_VALUE, PARTITION, NODENAME, NODENUMBER, DBPARTITIONNAME, DBPARTITIONNUM, DATAPARTITIONNAME oder DATAPARTITIONNUM angegeben. Der Name ist in dieser SQL-Anweisung nicht als Tabellenbezeichnung definiert oder die Tabellenbezeichnung kann dort, wo sie in der SQL-Anweisung angegeben ist, nicht referenziert werden. Wird in einer Klausel FROM hinter dem Tabellennamen ein Korrelationsname angegeben, wird dieser als Tabellenbezeichnung interpretiert. Wird kein Korrelationsname angegeben, wird der Tabellenname als Tabellenbezeichnung interpretiert. Wird die SQL-Benennung verwendet und ist die Tabelle durch einen Berechtigungsnamen qualifiziert, lautet die Tabellenbezeichnung Berechtigungsname.Tabellenname. Ist kein Berechtigungsname angegeben, ist die Tabellenbezeichnung der implizite Berechtigungsname, gefolgt vom Tabellennamen. Korrelation von einem verschachtelten Tabellenausdruck zu einer übergeordneten Tabelle ist nur zulässig, wenn das Schlüsselwort TABLE für die Definition des verschachtelten Tabellenausdrucks verwendet wird. Ist der Name *N, ist ein lateraler Korrelationsverweis aus einem verschachtelten Tabellenausdruck nicht zulässig. Aus einem der folgenden Gründe kann keine Korrelationsbeziehung zu einer Tabelle hergestellt werden, die dem verschachtelten Tabellenausdruck übergeordnet ist: -- Der verschachtelte Tabellenausdruck enthält UNION, EXCEPT oder INTERSECT. -- Der verschachtelte Tabellenausdruck enthält das Schlüsselwort DISTINCT in der Klausel SELECT. -- Der verschachtelte Tabellenausdruck enthält eine Klausel ORDER BY. -- Der Korrelationsbezug befindet sich in derselben Klausel FROM wie der verschachtelte Tabellenausdruck, ist aber Teil eines RIGHT OUTER JOIN oder RIGHT EXCEPTION JOIN. -- Der verschachtelte Tabellenausdruck befindet sich in der Klausel FROM eines anderen verschachtelten Tabellenausdrucks, der eine dieser Einschränkungen enthält. In einer OLAP-Funktion muss die Tabellenbezeichnung ORDER OF auf eine Tabellenbezeichnung in der Klausel FROM der Unterauswahl verweisen. Fehlerbeseitigung: Sicherstellen, dass alle Spaltennamen durch eine gültige Tabellenbezeichnung qualifiziert sind. Sicherstellen, dass eine Tabellenbezeichnung als Argument für die Funktion angegeben ist. Das Schlüsselwort TABLE verwenden, damit korrelierte Spalten innerhalb eines verschachtelten Tabellenausdrucks zulässig sind. Die Anforderung wiederholen.
    Verarbeitung wurde beendet, da die hervorgehobene Anweisung nicht erfolgreich abgeschlossen werden konnte

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Nun ja, ohne die Fehlermeldung können wir hier nichts machen.
    Lass dir mal die Fehlermeldung ausgeben, damit sieht man dann klarer.

    Alternativ kannst du je erst mal auf der AS/400 per STRSQL die Selects probieren (Mit F13 Auswahl 1 am Besten auf *SQL-Naming umschalten, dann bleibt die Syntax identisch).

    Oder mit dem Operationsnavigator die SQL's ausprobieren.
    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
    Aug 2001
    Beiträge
    2.928
    Um was geht es eigentlich?
    Willst Du die Sätze aufsummieren oder willst Du nur, dass keine Duplikate angezeigt werden?

    In Deinem letzten Beispiel hast Du zwar mehrere Felder aus unterschiedlichen Dateien ausgewählt, aber ich sehe weder eine Aggregat-Funktion (z.B. Sum(Fldx) oder Count(*) ) noch einen Group By.

    Beim Left Outer Join muss man außerdem berücksichtigen, dass sofern in der zweiten Datei kein Pendant gefunden wird NULL-Werte ausgegeben werden.
    Bei NULL-Werten ist zu beachten, dass sie außerhalb des gültigen Bereichs sind und deshalb entweder separat abgefragt oder in Default-Werte konvertiert werden müssen. Außerdem werden NULL-Werte in Aggregat-Funktionen nicht berücksichtigt. Das mag beim SUM() egal sein, jedoch bei COUNT() oder AVG() werden andere Ergebnisse ausgegeben.

    Wenn Du lediglich Duplikate vermeiden und keine Aggregat-Funktionen verwenden willst, kannst Du auch wie folgt vorgehen (Group By ist in diesem Fall nicht erforderlich):

    Code:
    Select Distinct File1.*, File2,*,  File3,*
       From File1 left Join File2 on ...
                  left Join File3 on ...
       Where ....;
    Birgitta
    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

  6. #6
    Registriert seit
    Oct 2007
    Beiträge
    42

    Beschreibung der Daten

    Ich danke euch erst mal für eure Unterstützung.

    Also in der ITHL01 sind Auftragsdaten des Tages seit 2007 vorhanden. Mit Teilenummern TPROD (mehrfach verarbeitet am Tag) und diese Nummer sind als IPROD in der IIML01 abgespeichert. Nun muss nur noch IPROD mit VENDOR aus der AVML01 abgeglichen werden... Und aus allen Tabellen müssen Div. Daten gezogen werden. Ca 30 Werte.... daher mein erster Gedanke mit dem * nach SELECT

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Im ersten Ansatz würde ich vermuten, dass es doppelte Feldnamen aus verschiedenen Tabellen gibt.
    SQL muss da schon wissen welches Feld du da meinst, außerdem müssen Kommentare mit
    /* Kommentar */
    oder
    -- Kommentar < CR > < LF >
    eingebettet sein:

    SELECT A.TPROD, /*von ITHL01 */
    A.TTDTE, /*von ITHL01 */
    B.IPROD, /*von IIML01 */
    B.IDESC, /*von IIML01 */
    C.VENDOR /*von AVML01 */
    FROM BPCSF.ITHL01 A

    LEFT JOIN BPCSF.IIML01 B
    ON A.TPROD = B.IPROD

    LEFT JOIN BPCSF.AVML01 C
    ON B.IPROD = C.VENDOR
    Where A.TTDTE >= 20110331
    and B.IITYP ='K'
    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

  8. #8
    Registriert seit
    Oct 2007
    Beiträge
    42

    Leider ein Fehler




    SQL-Status: 22003



    Vendorencode: -802



    Nachricht: [SQL0802] Fehler bei Datenumsetzung oder beim
    Zuordnen von Daten. Ursache . . . .
    : Fehler der Art 1 ist aufgetreten:
    Fehlerarten und ihre Bedeutung: 1 -- Arithmetischer Überlauf 2 --
    Gleitkommaüberlauf 3 -- Gleitkommaunterlauf 4 -- Gleitkommakovertierungsfehler
    5 -- Kein exaktes Ergebnis 6 -- Ungültige numerische Daten 7 -- DBCS- oder
    UTF-8-Daten sind nicht gültig. 8 -- Division durch Null 9 -- Hash-Wert kann für
    die angeforderte Abfrage nicht berechnet werden. 10 -- Benutzerdefinierte
    Funktion hat Abgleichungsfehler zurückgegeben. 11 -- Ungültige Länge in Spalte
    mit variabler Länge gefunden, die von einer Array-Ergebnisgruppe zurückgegeben
    wurde. 12 -- Ergebnis einer Verknüpfungsperation für ein Feld variabler Länge
    überstieg die maximal zulässige Länge für die Ergebnisart. Wenn der Fehler beim
    Zuordnen eines Werts zu einer Host-Variablen einer Anweisung FETCH oder
    eingebetteten Anweisung SELECT, SET oder VALUES INTO auftrat, ist der Name der
    Host-Variablen *N und die relative Position der Host-Variablen in der Klausel
    INTO ist 0. Ist der Name der Host-Variablen *N, trat der Fehler bei dem Versuch
    auf, eine Suchbedingung aufzulösen. Wenn mehrere Fehler beim Zuordnen von Daten
    aufgetreten sind, handelt es sich um eine Beschreibung des ersten Fehlers, der
    aufgetreten ist. Die vorherigen Nachrichten im Jobprotokoll beschreiben Fehler,
    die beim Zuordnen von Daten aufgetreten sind. Fehlerbeseitigung: Der Fehler wurde von ungültigen oder zu
    umfangreichen Daten verursacht. Die vorherigen Nachrichten im Jobprotokoll
    (Befehl DSPJOBLOG) oder F10 (Nachrichten im Jobprotokoll anzeigen) in dieser
    Anzeige drücken, um die fehlerhaften Zeilen und Spalten zu bestimmen. Die Daten
    korrigieren und die Anforderung wiederholen.




    fficeffice" />>>



    Verarbeitung wurde beendet, da die hervorgehobene
    Anweisung nicht erfolgreich abgeschlossen werden konnte




  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    ... und Du glaubst wir können Dir jetzt weiterhelfen, ohne das SQL-Statement, das Du ausgeführt hast und Deine Daten zu kennen??????

    Birgitta
    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

  10. #10
    Registriert seit
    Oct 2007
    Beiträge
    42

    SQL STM

    Guten Morgen,

    hier ein SQL das geht... es ist aber nur ein LEFT JOIN enthalten

    Code:
    SELECT TPROD,
    TTDTE,
    BPCSF.IIML01.IDESC  
    FROM BPCSF.ITHL01 
    LEFT JOIN BPCSF.IIML01 
    ON TPROD = IPROD  
    Where TTDTE >= 20110331
    Und nun wollte ich eine weitere Tabelle über LEFT Join verbinden, jedoch kommt da die u.g. Fehlermeldung.

    Code:
    SELECT TPROD, 
    TTDTE, 
    BPCSF.IIML01.IDESC, 
    BPCSF.AVML01.VNDNAM /*T3 neu*/
    FROM BPCSF.ITHL01 
    LEFT JOIN BPCSF.IIML01 
    ON TPROD = IPROD
    LEFT JOIN BPCSF.AVML01 /*T3 neu*/
    ON BPCSF.IIML01.IPROD = VENDOR 
    Where TTDTE >= 20110331 and IITYP ='K'
    Fehlermeldung

    SQL-Status: 22003
    Vendorencode: -802
    Nachricht: [SQL0802] Fehler bei Datenumsetzung oder beim Zuordnen von Daten. Ursache . . . . : Fehler der Art 1 ist aufgetreten: Fehlerarten und ihre Bedeutung: 1 -- Arithmetischer Überlauf 2 -- Gleitkommaüberlauf 3 -- Gleitkommaunterlauf 4 -- Gleitkommakovertierungsfehler 5 -- Kein exaktes Ergebnis 6 -- Ungültige numerische Daten 7 -- DBCS- oder UTF-8-Daten sind nicht gültig. 8 -- Division durch Null 9 -- Hash-Wert kann für die angeforderte Abfrage nicht berechnet werden. 10 -- Benutzerdefinierte Funktion hat Abgleichungsfehler zurückgegeben. 11 -- Ungültige Länge in Spalte mit variabler Länge gefunden, die von einer Array-Ergebnisgruppe zurückgegeben wurde. 12 -- Ergebnis einer Verknüpfungsperation für ein Feld variabler Länge überstieg die maximal zulässige Länge für die Ergebnisart. Wenn der Fehler beim Zuordnen eines Werts zu einer Host-Variablen einer Anweisung FETCH oder eingebetteten Anweisung SELECT, SET oder VALUES INTO auftrat, ist der Name der Host-Variablen *N und die relative Position der Host-Variablen in der Klausel INTO ist 0. Ist der Name der Host-Variablen *N, trat der Fehler bei dem Versuch auf, eine Suchbedingung aufzulösen. Wenn mehrere Fehler beim Zuordnen von Daten aufgetreten sind, handelt es sich um eine Beschreibung des ersten Fehlers, der aufgetreten ist. Die vorherigen Nachrichten im Jobprotokoll beschreiben Fehler, die beim Zuordnen von Daten aufgetreten sind. Fehlerbeseitigung: Der Fehler wurde von ungültigen oder zu umfangreichen Daten verursacht. Die vorherigen Nachrichten im Jobprotokoll (Befehl DSPJOBLOG) oder F10 (Nachrichten im Jobprotokoll anzeigen) in dieser Anzeige drücken, um die fehlerhaften Zeilen und Spalten zu bestimmen. Die Daten korrigieren und die Anforderung wiederholen.
    Verarbeitung wurde beendet, da die hervorgehobene Anweisung nicht erfolgreich abgeschlossen werden konnt

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Haben IPPROD und VENDOR den gleichen Datentypen und die gleiche Länge?

    Ansonsten denke ich, dass die Verknüpfung von NULL-Werten, die beim Left Outer Join bei nicht gefunden entstehen können für die Fehlermeldung verantwortlich sind.
    Deshalb versuch mal folgendes:
    Code:
    SELECT TPROD, TTDTE, BPCSF.IIML01.IDESC, 
          BPCSF.AVML01.VNDNAM /*T3 neu*/
    FROM BPCSF.ITHL01 
         LEFT JOIN (BPCSF.IIML01 
                    LEFT JOIN BPCSF.AVML01 /*T3 neu*/
                    ON BPCSF.IIML01.IPROD = VENDOR)
         ON TPROD = IPROD
    Where TTDTE >= 20110331 and IITYP ='K'
    In dem Beispiel wird zunächst der zweite Left Outer Join ausgeführt und das Ergebnis über Left Outer Join mit der ersten Tabelle verknüpft.

    Ist IPROD eigentlich eindeutig, oder in mehreren Tabellen (u.U. mit unterschiedlicher Definition) vorhanden?

    Birgitta
    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

  12. #12
    Registriert seit
    Oct 2007
    Beiträge
    42

    Super

    Der Tipp mit den Datentyp war der richtige!!! Super vielen Dank!! Musste ich noch ändern.

    Mensch wenn dann so die Daten angezeigt werden kommt mir immer ein

Similar Threads

  1. dynamisches Group by funktioniert nicht
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 24-09-09, 08:31
  2. sql select mit zusätzl. Feldern
    By rr2001 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 07-07-06, 09:56
  3. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  4. Satzanzahl Select (embedded SQL)
    By Schorsch in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-09-05, 15:22
  5. SQL Select unter 5.1 und 5.2
    By holly in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 15-06-04, 10:04

Berechtigungen

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