nach Ausgleichsbelegen filtern

nach Ausgleichsbelegen filtern

am 08.11.2006 10:15:14 von Johannes Mueller

Hallo NG,

ich bin nicht so firm mit SQL-Abfragen, deswegen also hier mal eine
konzeptuelle Frage.

Skizziertes Problem:
Ich habe eine Tabelle dort sind Buchungen mit verschiedenen
Buchungsschlüsseln (Key) drin (z.B. 40 = Soll, 50 = Haben, 41 =
KreditorHaben [..]).

Desweiteren können mehrere Buchungen zu einem ökonomischen Sachverhalt
gehören, also mehrere Buchungen mit Schlüssel 40 und 50 etc. gehören
zusammen. Wobei - was ja sicher auch viele wissen - der Betrag der Soll
Buchungen = dem Betrag der Haben Buchungen in der Summe sein soll. Dies
wird durch eine Spalte in der Tabelle abgebildet, die quasi die
Ausgleichsnummer mitspeichert. Das ist nicht unbedingt unredundant,
aber historisch gewachsen :)

Nun möchte ich mir alle "Ausgleiche" anzeigen lassen, wo dies nicht der
Fall ist, also wo die Höhe der SollBuchungen gerade nicht denen der
HabenBuchungen entspricht.

Im Prinzip ist das ja ein StandardProblem, das so sicher schon
Millionenfach gelöst wurde - außer von mir :)

Meine bisherige Denke:
0. sinnmäßig muss ich irgendwie durch alle Ausgleichsbelege "iterieren"
(bzw. die Buchungen ausgeben lassen wo gerade die Summe der S nicht der
Summe der mit Ausgleichsbeleg zugehörigen H entspricht)
1. dabei eine Summe für die Soll-Buchungen bilden
2. und dabei eine Summe für die Haben-Buchungen bilden
3. danach die beiden Summen vergleichen

Summen bilden ist denke ich kein Problem, womit ich ein Problem habe
ist das mit dem "iterieren" - kennt dazu jemand ein gutes Tutorial
(auch auf englisch) oder kann mir da einen hilfreichen Tipp geben?

Danke
Johannes

Die Tabelle im Überblick:
+----+-----+--------+------+-----------+
| ID | Key | Betrag | Text | Ausgleich |
+----+-----+--------+------+-----------+
| 1 | 40 | 500 | xy | 1 |
+----+-----+--------+------+-----------+
| 2 | 40 | 600 | xy | 1 |
+----+-----+--------+------+-----------+
| 3 | 50 | 1200 | xy | 1 |
+----+-----+--------+------+-----------+

....sollte dann ausgeworfen werden, weil der Ausgleich nicht aufgeht! Es
ist kein bißchen normalisiert und deswegen schäm ich mich auch ein
bißchen, aber das sind nicht wirklich viele Buchungen, deswegen ist das
performancetechnisch auch nicht wirklich schlimm.

--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.

Re: nach Ausgleichsbelegen filtern

am 08.11.2006 11:20:03 von Johannes Vogel

Hi Johannes

Johannes Mueller wrote:
> ich bin nicht so firm mit SQL-Abfragen, deswegen also hier mal eine
> konzeptuelle Frage.

SQL? Warum dann dclpd?

> Skizziertes Problem:
> Ich habe eine Tabelle dort sind Buchungen mit verschiedenen
> Buchungsschlüsseln (Key) drin (z.B. 40 = Soll, 50 = Haben, 41 =
> KreditorHaben [..]).
> Desweiteren können mehrere Buchungen zu einem ökonomischen Sachverhalt
> gehören, also mehrere Buchungen mit Schlüssel 40 und 50 etc. gehören
> zusammen. Wobei - was ja sicher auch viele wissen - der Betrag der Soll
> Buchungen = dem Betrag der Haben Buchungen in der Summe sein soll. Dies
> wird durch eine Spalte in der Tabelle abgebildet, die quasi die
> Ausgleichsnummer mitspeichert. Das ist nicht unbedingt unredundant, aber
> historisch gewachsen :)

Ich vermute mal, dein Design ist nicht mehr normal... :-(

> Nun möchte ich mir alle "Ausgleiche" anzeigen lassen, wo dies nicht der
> Fall ist, also wo die Höhe der SollBuchungen gerade nicht denen der
> HabenBuchungen entspricht.
> Im Prinzip ist das ja ein StandardProblem, das so sicher schon
> Millionenfach gelöst wurde - außer von mir :)

Folgendes kann ich dir anbieten. Es ist ungetestet und könnte zumindest
als Ansatz dienen.

select a.key, a.total, b.key, b.total, if(a.total=b.total,0,1) ausgleich
from (select key, sum(betrag) total from tabelle group by key) as a
join (select key, sum(betrag) total from tabelle group by key) as b
where a.key=40 and b.key=50 and a.key
HTH, Johannes