PDA

View Full Version : Sql Summe Feld aus 2 Datensätzen



DEVJO
01-02-14, 09:37
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

andreaspr@aon.at
01-02-14, 09:58
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

DEVJO
01-02-14, 11:36
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

Fuerchau
01-02-14, 14:30
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.

B.Hauser
01-02-14, 15:22
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:

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

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