tuoni
Bloody Newbie
|
Hallo Leute,
Folgendes Problem habe ich:
In einer SQL2000 DB habe ich drei Tabellen. Artikel, Lagerzugaenge und Lagerabgaenge.
Jetzt will ich für einen bestimmten Artikel die Summe aller Lagerzugänge und die Summe aller Lagerabgänge abfragen.
Frage ich zb nur die Zugänge für einen Artikel ab funkt es.
SELECT Artikel.Nr, Artikel.Kurzbez, Artikel.Bezeichnung, Artikel.Hersteller, SUM(Lagerzugaenge.Menge) FROM Artikel, Lagerzugaenge WHERE Artikel.Hersteller = '139' AND Artikel.Nr = '3011' AND Lagerzugaenge.Artikel = Artikel.Nr GROUP BY Artikel.Kurzbez, Artikel.Nr, Artikel.Bezeichnung, Artikel.Hersteller ORDER BY Artikel.Bezeichnung;
Frage ich aber in der Query die Zugänge und die Abgänge zur gleichen Zeit ab, bekomme ich Werte die überhaupt nicht mehr stimmen.
SELECT Artikel.Nr, Artikel.Kurzbez, Artikel.Bezeichnung, Artikel.Hersteller, SUM(Lagerzugaenge.Menge), SUM(Lagerabgaenge.Menge) FROM Artikel, Lagerzugaenge, Lagerabgaenge WHERE Artikel.Hersteller = '139' AND Artikel.Nr = '3011' AND Lagerzugaenge.Artikel = Artikel.Nr AND Lagerabgaenge.Artikel = Artikel.Nr GROUP BY Artikel.Kurzbez, Artikel.Nr, Artikel.Bezeichnung, Artikel.Hersteller ORDER BY Artikel.Bezeichnung;
Kann mir jemand helfen? Wo ist mein Denkfehler? Es sollte doch möglich sein zwei SUM() in einer Query zu verwenden, oder?
Danke tuoni
|
Luzandro
OC Addicted
|
AND Lagerzugaenge.Artikel = Artikel.Nr AND Lagerabgaenge.Artikel = Artikel.Nr Damit bekommst du die Artikel, für die es sowohl Zugänge als auch Abgänge gibt - sollte es nur eines davon geben, brauchst du Outer Joins
|
tuoni
Bloody Newbie
|
Ok. Aber das ist nicht mein Problem.
Mein Problem ist folgendes:
Für jede Lagerbewegung wird zb in der Tabelle Lagerzugaenge eine Zeile mit Artikelnummer und Menge geschrieben.
Rufe ich jetzt in meiner Query mit der SUM() Funktion die Summe aller Zugänge für einen bestimmten Artikel ab, bekomme ich einen richtigen Wert. zb 2100
Rufe ich aber im selben Query auch noch die Abgänge mit einer SUM() Funktion ab, bekomme ich für den gleichen Artikel nicht mehr 2100 Zugänge sonder zb 264000.
Und das verstehe ich nicht ganz.
mfg tuoni
|
M.I.P.S.
Big d00d
|
So wie ich das sehe hast du für die Zugangsmenge eines Artikels ein Kreuzprodukt mit sämtlichen Abgangsmengen wodurch die Mördersumme rauskommt.
Bearbeitet von M.I.P.S. am 08.11.2006, 12:57
|
rettich
Legendwaffle, waffle!
|
Rufe ich aber im selben Query auch noch die Abgänge mit einer SUM() Funktion ab, bekomme ich für den gleichen Artikel nicht mehr 2100 Zugänge sonder zb 264000. wie groupst du in einer query sowohl nach eingängen als auch nach ausgängen? IMHO geht das nciht.
|
Gulinborsti
Addicted
|
Zwei SUM() Functions in einem Query erscheinen mir auch etwas ... dubios . Leg dir doch eine View für jeweils alle Eingänge und Ausgänge an: viewEingang: SELECT Eingang.ArtikelId, SUM(Eingang.Menge) AS Eingang
FROM Eingang
GROUP BY Eingang.ArtikelId
viewAusgang: SELECT Ausgang.ArtikelId, SUM(Ausgang.Menge) AS Ausgang
FROM Ausgang
GROUP BY Ausgang.ArtikelId
... und mach ein Query dann darüber: SELECT Artikel.Id, Artikel.Bezeichnung, viewEingang.Eingang, viewAusgang.Ausgang
FROM Artikel
LEFT JOIN viewAusgang ON Artikel.Id = viewAusgang.ArtikelId
LEFT JOIN viewEingang ON Artikel.Id = viewEingang.ArtikelId
So sollte es jedenfalls klappen, eine elegantere Lösung fällt mir so auf die schnelle nicht ein ...
|
DirtyHarry
aka robobimbo
|
meinst du nicht - das es effizienter wäre nur eine tabelle mit den lagerbewegungen zu haben? zugänge mit +betrag, abgänge mit -betrag. ev. kannst ja noch ein "art" feld mit einbinden fall gewünscht in dem du die art der buchung zusätzlich abspeicherst "Z" - Zugang, "A" - Abgang, "M" - Manuelle Buchung usw...
nur als Anregung, weiss ja nicht inwieweit die Struktur deiner DB schon vorgegeben ist
|
that
ModeratorHoffnungsloser Optimist
|
Wo ist mein Denkfehler? Du bekommst für jeden Zugang alle Abgänge.
|
tuoni
Bloody Newbie
|
OK. Bin im Bilde wo der Fehler lag. Werde es entweder in zwei Abfragen teilen oder mit views arbeiten.
Danke an alle für die rasche Hilfe.
@robobimbo: Leider ist es nicht möglich die Struktur der DB zu ändern. Ist eine gekaufte WAWI.
Danke tuoni
|