[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2002
    Beiträge
    331

    Sql Summe Feld aus 2 Datensätzen

    Moin moin,

    ich hätte da mal wieder ein Problem, wo ich den Wald vor lauter Bäumen nicht sehe

    Ich baue gerade an einer Abfrage um diverse Summen zu berechnen und das funktioniert auch ganz gut bisher.
    Nun brauche ich aber in einer Abfrage, die ich über eine View laufen lasse, die Summe eines Feldes aus einer 2. Datei. Dieses will ich in einem Sub-Select mit einfügen.

    select a.abc,
    (select sum(b.zumRechnen) as summe from LIB/DATEIB B
    where a.key = b.key and b.key2 = 'key')

    from LIB/DateiA a join LIB/DATEIB B2 on
    a.key = B2.key
    where B2.key2 = 'key'

    group by a.abc

    In der Datei DATEIB sind diverse Datensätze zugehörig zu DateiA (nur 1 Datensatz) aus einer bestimmten Anzahl Datensätze soll die Summe eines bestimmten Feldes ermittelt werden.
    Ich bekomme dann beim ausführen via StrSql allerdings die Fehlermeldung
    "Ergebnis der Anweisung enthält mehr als eine Zeile".

    Vielleicht kann mir ja jemand helfen?

    Gruß
    Devjo

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo Joe,

    Ich würde eher eine andere Fehlermeldung erwarten, da ich mir nicht sicher bin, ob der Fehler nicht in der Group By Syntax steckt.
    Ich kenne allerdings auch nicht deine Daten.

    Ich würde an deiner Stelle die Abfragen splitten und dich langsam vorarbeiten um den Fehler eingrenzen zu können.

    lg Andreas

  3. #3
    Registriert seit
    Jul 2002
    Beiträge
    331
    Moin Andreas,

    inzwischen habe ich es hinbekommen....meiner Fehler war das ich den Join noch mit rein genommen habe, dadurch hat (bzw. hätte bei ausführung) er sich (denke ich zumindest) aufgespult.
    Jetzt läuft die Abfrage, sogar besser, als ich gedacht hätte

    Gruß
    Devjo

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Deine Syntax ist eigentlich falsch!

    "select ..., (select ...), ..." ist ein "skalarer Subselect", dieser liefert ein Ergebnis auf dem Einzelsatz.

    Bei Aggregaten mit scalarem Subselect wäre korrekt:

    select f1, sum((select sum(...) from ... where ...))
    from ...
    where ...
    group by ...

    Eigentlich sollte beim Fehlen des ersten "sum" ein Aggregatfehler (Syntaxfehler) und kein Ergebnis kommen.
    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.869
    Ich würde die Syntax ändern und den Sub-Select nicht bei den SELECT-Feldern sondern entweder in der FROM-Anweisung oder als Common Table Expression hinterlegen. Beides ist m.E. leichter zu verstehen und lesen:
    1. Sub-Select in der FROM-Anweisung:
    Code:
    Select a.abc, ... , Summe
    From DateiA a Join (Select Key1B, Key2B, ... Sum(Feld) Summe
                           From DateiB b
                           Where ....
                           Group By Key1, Key2, ...) x 
         on a.Key1 = x.Key1 and a.Key2 = x.Key2 ...
    Where ...
    2. Common Table Expression
    Code:
    With x as (Select Key1, Key2, ... Sum(Feld) Summe
                  From DateiB
                  Where ...
                  Group By Key1, Key2, ....)
    Select ABC, .... , Summe
       From DateiA a join x 
            on a.Key1 = x.Key1, a.Key2 = x.Key2 ...
       Where ...
    Birgitta
    Birgitta Hauser

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

Similar Threads

  1. BINCHAR - wie kann ich das Feld verwenden?
    By harbir in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 31-10-13, 19:10
  2. numerisches Feld erstellen
    By heynem in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-12-02, 10:27
  3. DSPF-Feld aufbereiten
    By GS in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 09-10-02, 13:18
  4. Alphawerte in Feld ermitteln - ILE RPG
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 25-10-01, 22:06
  5. Char-Feld 4-stellig, per SQL nur 1. Stelle ändern
    By LGALF in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 05-07-01, 18:09

Berechtigungen

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