-
Problem SQL Summenbildung
Hallo Kollegen,
ich soll aus 3 Datei folgendes bilden:
Artikel_Datei :
Artikel-Nr 1
Artikel-Nr 2
Artikel-Nr 3
Lager_Datei :
Artikel-Nr 1, Lagerbestand
Artikel-Nr 2, Lagerbestand
Artikel-Nr 3, Lagerbestand
Abgangsdatei:
Artikel-Nr 1, Umsatz1
Artikel-Nr 1, Umsatz2
Artikel-Nr 1, Umsatz3
Artikel-Nr 2, Umsatz1
Artikel-Nr 2, Umsatz2
Artikel-Nr 2, Umsatz3
Artikel-Nr 3, Umsatz1
Artikel-Nr 3, Umsatz2
Artikel-Nr 3, Umsatz3
als Ergebnis sollte herauskommen:
Artikel-Nr 1, Lagerbestand, sum(aus abgangsdatei)
Artikel-Nr 2, Lagerbestand, sum(aus Abgangsdatei)
Artikel-Nr 3, Lagerbestand, sum(aus Abgangsdatei)
Ich bekomme das mit SQL nicht hin????
Hat einer von Euch eine Idee?
Danke im Voraus für Eure Hilfe
Gruß
Jenne
-
Gibt es in der Lager-Datei immer nur einen Satz pro Artikel?
Kannst Dein bisheriges Statement mal posten, dann kann man besser bei dem Problem helfen, oder hast Du generell Probleme das in SQL abzubilden?
Xanas
-
Vielleicht so (aber ohne Gewähr).
PHP-Code:
SELECT A.ARTIKEL, B.BESTAND, SUM(U.UMSATZ)
FROM FILE1 AS A
LEFT OUTER JOIN FILE2 AS B ON A.ARTIKEL=B.ARTIKEL
LEFT OUTER JOIN FILE3 AS U ON A.ARTIKEL=U.ARTIKEL
GROUP BY A.ARTIKEL, B.BESTAND
ORDER BY A.ARTIKEL, B.BESTAND
-
Das Problem ist, dass der Lagerbestand nur 1 x pro Artikel, der Umsatz aber n x pro Artikel auftritt.
Du musst daher für den Bestand den Durchschnitt AVG(Lagerbestand) bilden.
select Artikel, avg(b.Lagerbestand), sum(c.Umsatz)
from Artikel a
left join Lager b on a.Artikel=b.Artikel
left join Umsatz c on a.Artikel=c.Artikel
Klarer wirds mit einer CTE:
with
xUms as (select Artikel, sum(Umsatz) as Umsatz from UmsatzDatei group by Artikel)
,
xLager as (select Artikel, sum(Bestand) as Bestand from Lager group by Artikel)
select Artikel, Bestand, Umsatz
from ArtikelDatei A
left join xLager b on a.Artikel=b.Artikel
left join xUmsatz c on a.Artikel=c.Artikel
-
ungefähr so:
PHP-Code:
with x as
( select ArtikelNr, coalesce(sum(Umsatz), 0) as Umsatz
from UmsatzDatei
group by ArtikelNr
)
select ...
from Artikel
join Bestand on ...
join x on ...
-
... mir gefällt in diesem Fall die Subselect Variante ganz gut:
PHP-Code:
select a.*, l.*, (select coalesce(sum(umsatz), 0)
from abgang g
where g.artikel = a.artikel) umsatz
from artikel a
left join lager l
on a.artikel = l.artikel
wenn es mehrere Sätze in Lager für einen artikel geben kann, muss man im äußeren Select pro Artikel gruppieren und aufsummieren. Kann es auch sein, dass kein Lagersatz da ist, empfiehlt sich über das Bestandsfeld eine coalesce Funktion, analog zu dem umsatfeld.
D*B
-
Danke an Alle,
mit dem join hat super funktioniert.
Gruß
Jenne
Similar Threads
-
By Stefan_Sk in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 26-05-06, 16:37
-
By Lucky4712 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-05-06, 15:57
-
By cbe in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-06-05, 16:21
-
By itec01 in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 16-09-04, 18:38
-
By cicero22 in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 28-04-04, 14:10
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks