Anmelden

View Full Version : SQLRPGLE group by



loeweadolf
20-12-05, 22:58
Aus einer Lagerdatei sollen nach Auswahl bestimmte Datenbestände ausgefiltert werden und nach bestimmten Merkmalen verdichtet werden.

Ene declare-Anweisung kann nach meiner Ansicht so aussehen:



declare C_bestand cursor for
select befirm, belort, bequal, begros .... sum(bemenge)
from bestand
where befirm = :bifirm
and belort >= :vonlort
and belort <= :bislort
and .....
group by bequal, bedess, befarb ...


So würde ich durch den fetch mehrere Zeilen für die Subfile-Anzeige erhalten, jeweils mit summierter Menge der in GROUP BY definierten Merkmale.

Jetzt kommt die Frage:
Ich möchte für dieselben Gruppierungen eine weitere Summe der Menge erhalten, die aber nur einen Teil der jeweiligen Datensätze umfasst, und zwar alle, die im Feld AUFTR = 0 sind.

Kann ich dieses in derselben DECLARE-Anweisung definieren ?


mfg Ludger

Kampi4
21-12-05, 07:37
Morgen Ludger,






Sum

berechnet die Summe aller Werte, welche der numerische Ausdruck bereitstellt

Syntax

Sum ([All | Distinct] <NUMERISCHER Ausdruck>)

Parameterliste



<DL>




<DT>All <DD>bei der Summation werden alle Werte verarbeitet, welche der numerische Ausdruck zurückliefert <DT>Distinct <DD>aus der Liste, welche der numerische Ausdruck bereitstellt, werden alle Duplikate entfernt, nur über diese Teilmenge wird summiert <DT><NUMERISCHER Ausdruck><DD>Ausdruck, meist eine Spalte oder ein spaltenverarbeitender Ausdruck, der numerische Daten zurückliefert. Unterabfragen und Aggregatfunktionen sind nicht zulässig.</PARAM-LIST></DD></DL><DL><DT>Rückgabewert <DD>Summe der Werte im genauest möglichen bzw. notwendigen Typ </DD></DL>Nach meiner Erfahrung und nach google (siehe oben), sieht es für mich so aus, als wenn du das nicht in der Declare Anweisung unterbringen kannst. Aber vielleicht kennt sich einer besser in SQL aus.


Du könntest das nur mit einer "Where" Bedingung hinbekommen, was aber den Select der anderen Daten auch beeinflusst und das willst du ja wahrscheinlich nicht.

Mfg KAMPI

Fuerchau
21-12-05, 08:43
sum(case auftr when 0 then bemenge else 0 end) as mengeA0

loeweadolf
21-12-05, 18:51
Vielen Dank für die Antworten.


@Baldur

genau das war es (case werde ich mir merken).

Kampi4
21-12-05, 19:02
Mmh man lernt nie aus, wusste ich auch nicht und dachte, auch nach googeln, das das nicht geht.
Naja noch mal was gerlernt für dieses Jahr.

Mfg KAMPI

P.S. Allen ein schönes Weihnachten und einen guten Rutsch!! Bin ab morgen erst mal 1 1/2 Wochen ohne I-Net.