query mit berechnung einer endsumm in einer tabelle / ausgabe
am 02.03.2007 16:15:40 von Patrick Bates
vielen dank für eure hilfe - leider komm ich nicht weiter und suche -
mittlwerweile
schon etwas verzweifelt - nach der lösung bei folgender problemstellung:
es liegt eine tabelle vor, welche so aussieht:
ID BELEG_ID QUELL_ID MENGE
1 1 -1 5
2 2 1 5
3 3 -1 6
4 3 -1 2
5 3 -1 10
6 4 -1 50
7 5 3 6
8 5 5 5
9 6 2 5
und jetzt zum gesuchten query:
ausgegeben werden sollen alle jene ID, wo die MENGE (QUELL_ID = -1) minus
der MENGE,
wo diese ID die QUELL_ID ist, ungleich '0' ist.
also in diesem fall wäre die ausgabe:
ID BELEG_ID MENGE
4 3 2
5 3 5
6 4 50
und zu guter letzt möchte ich das noch auf BELEG_ID gruppieren ....
ich bastle schon seit stunden an sum(), join und sonstigem herum, komm aber
nicht zur lösung.
wer entfernt das brett vor meinem kopf ;-)
greets
-/--\-
alex
Re: query mit berechnung einer endsumm in einer tabelle / ausgabe
am 02.03.2007 17:29:43 von Daniel Fischer
Alexander Kainz!
> und jetzt zum gesuchten query:
> ausgegeben werden sollen alle jene ID, wo die MENGE (QUELL_ID = -1)
> minus der MENGE,
> wo diese ID die QUELL_ID ist, ungleich '0' ist.
ich bin mir nicht sicher, ob ich das richtig parse, aber der folgende
Query liefert jedenfalls deine Ausgabe:
SELECT a.id,a.beleg_id,a.menge-COALESCE(b.menge,0) AS mdiff
FROM tabelle a
LEFT JOIN tabelle b ON a.id = b.quell_id
WHERE a.quell_id = -1 AND a.menge-COALESCE(b.menge,0) != 0;
(Wenn unten nicht das mit dem Gruppieren stuende, koenntest du den teil
nach dem AND in der WHERE-Klausel durch ein "HAVING mdiff != 0" ersetzen.)
> also in diesem fall wäre die ausgabe:
>
> ID BELEG_ID MENGE
> 4 3 2
> 5 3 5
> 6 4 50
>
> und zu guter letzt möchte ich das noch auf BELEG_ID gruppieren ....
Gerne, dazu brauchst du nur ein GROUP BY a.beleg_id am Ende. Aber du hast
irgendwie nicht erwaehnt, wie die anderen Spalten aggregiert werden
sollen. Ich rate einfach mal:
SELECT GROUP_CONCAT(a.id) AS ids, a.beleg_id,
SUM(a.menge-COALESCE(b.menge,0)) AS mdiff
FROM tabelle a
LEFT JOIN tabelle b ON a.id = b.quell_id
WHERE a.quell_id = -1 AND a.menge-COALESCE(b.menge,0) != 0
GROUP BY a.beleg_id;
> wer entfernt das brett vor meinem kopf ;-)
Das geht normalerweise mit einem Hammer.
Gruß
Daniel
Re: query mit berechnung einer endsumm in einer tabelle / ausgabe
am 02.03.2007 19:22:51 von Patrick Bates
"Daniel Fischer" schrieb im Newsbeitrag
news:pan.2007.03.02.16.29.42.798526@df.erinye.com...
> Alexander Kainz!
>
> ich bin mir nicht sicher, ob ich das richtig parse, aber der folgende
> Query liefert jedenfalls deine Ausgabe:
>
> SELECT a.id,a.beleg_id,a.menge-COALESCE(b.menge,0) AS mdiff
> FROM tabelle a
> LEFT JOIN tabelle b ON a.id = b.quell_id
> WHERE a.quell_id = -1 AND a.menge-COALESCE(b.menge,0) != 0;
vielen dank. in andere form hab ich in die richtung schon getüftelt.
COALESCE ist
übrigens ein super-hinweis!
stark vereinfacht muss die berechnung bzw. ausgabe folgendermassen ablaufen
(ich
habe das beispiel verändert, um es deutlicher darzustellen):
ID BELEG_ID QUELL_ID MENGE
23 47 -1 3
61 72 23 2
63 74 23 1
so, und jetzt das query in human-language:
zeige ID wo QUELL_ID = -1 als 'BASIS_ID' und MENGE dieses Datensatz minus
summe
aller mengen wo QUELL_ID = BASIS_ID
in obiger Liste dürfe demnach kein Datensatz gefunden werden, weil die
Ausgangsmenge
von 3 (ID 23) minus 2 (ID 61) und minus 1 (ID 63) = 0
>
> Das geht normalerweise mit einem Hammer.
>
wird sich hoffentlich vermeiden lassen ;-)
greets
-/--\-
alex