-
Was Britta geschrieben hat, geht nur dann gut, wenn in beiden Lagern jeweils alle Artikelnummern geführt werden, und keine fehlen, meine ich. In einem Join würde ich besonders mit CASE WHEN ... die betreffenden Felder auswählen ..
Ich denke aber eher an UNION, SUBSELECTS und KORRELATIONEN:
Select A.Firma, A.Lager, A.Artikel, A.Menge from fileA A where A.Menge>0
Union
Select B.Firma, B.Lager, B.Artikel, B.Menge from fileB B where B.Menge>0
and B.Artikel not in
( select X.Artikel from fileA X
where X.Artikel=B.Artikel and X.Menge>0 )
---
Den Ausdruck X.Artikel=B.Artikel in der letzten Zeile nenne ich hierbei „Korrelation“.
Hier wird natürlich das Lager aus FileA ganz stark priorisiert, Du kannst das obere SELECT aber auch mit Korrelation auf das untere formulieren, und beispielsweise abfragen, welcher Bestand jeweils größer ist, um den größeren dann auszuwerten, und den kleineren zu ignorieren … Dann wäre kein Lager priorisiert..
In Deinem Fall könnte ich mir auch vorstellen, daß es vielleicht in jedem Lager Mindestbestände gibt,
verfügbare Bestände, Bestellbestände, per ultimo fortgeschriebene Bestände usw. Evtl. mußt Du die SELECTs so formulieren, daß sie die BestandsMengen oder die BedarfsMengen kumulieren, oder irgendwie berücksichtigen. Du solltest die Anforderung mal ganz genau (umgangssprachlich) formulieren. Man kann dann viel besser sehen, ob das deklarativ (in SQL) ausgedrückt werden kann, oder ob man es prozedural (mit STORED PROCEDURES und USER DEFINED FUNCTIONS) angehen sollte.
PS: das SELECT mit UNION mußt Du evtl. noch um Klammern und Bezeichner erweitern, es sollte aber funktionieren.
Ich kann noch nicht versprechen, daß Du dies als View speichern kannst, oder als MATERIALIZED VIEW ... Die Ausgabe eher.
Wenns überhaupt nicht geht, würde ich eine UserDefinedFunction draus machen, vielleicht etwas modularer als UDTF
mit einem Input-Parameter ARTIKELNR, und einem Datensatz als Result, das läßt sich dann schön leicht wiederverwenden,
d.h. genau so, wie jede andere Funktion im SQL auch. Die Funktion (UDTF) müßte man aber regelrecht programmieren ...
-
Du kannst aber auch mit CTE arbeiten:
with
ZLager as
(select Artikel, sum(Menge)
from ArtBest group by Artikel)
select ...
from File A
left join ZLager B on A.Artikel = B.Artikel
-
Hallo,
danke für die Hinweise, ich werde jetzt mal versuchen das gesagte umzusetzen.
GG
-
 Zitat von Fuerchau
Du kannst aber auch mit CTE arbeiten:
with
ZLager as
(select Artikel, sum(Menge)
from ArtBest group by Artikel)
select ...
from File A
left join ZLager B on A.Artikel = B.Artikel
Hallo fuerchau,
mein sql sieht jetzt so aus:
with zlager as (select lgfa, sum(lglfbs) from lag01pf)
select akanr from ako01pf inner join abw01pf on akfa = bwfa
and akanr = bwanr inner join tst01pf on akfa = tefa and
bwtenr = tetenr left join zlager on lgfa = akfa and lgtenr = bwtenr
Leider beschwert er sich
Spalte LGFA oder Ausdruck in SELECT-Liste nicht gültig.
Das Feld ist aber definitiv drin.
Die andere Lösung hatte ich auch mal probiert, aber trotzdem ich distinct gesagt habe, hat er mir sobald ich die Lagerdatei am Wickel hatte immer 2 Sätze angezeigt und nicht nur einen.
SELECT DISTINCT AKO01PF.AKANR, AKO01PF.AKKTO, AKO01PF.AKNAM1,
AKO01PF.AKKA02, AKO01PF.AKKA14, AKO01PF.AKSA06, AKO01PF.AKKDT2,
AKO01PF.AKKDT3, AKO01PF.AKKDT8, ABW01PF.BWTENR, TST01PF.TE##31,
TST01PF.TE##33, TST01PF.TE##32, ABW01PF.BWSMEN, ABW01PF.BWKZ01,
ABW01PF.BWKZ11, LAG01PF.LGMBST, LAG01PF.LGLFBS akanr FROM
ako01pf inner join abw01pf on akfa = bwfa and akanr =
bwanr inner join tst01pf on akfa = tefa and bwtenr = tetenr inner
join lag01pf on lgfa = bwfa and lgtenr = bwtenr WHERE
AKO01PF.AKKDJ1 = 1 and akfa = 1 and akanr = 49099
führt zu
SA06 KDT2 KDT3 KDT8 TENR ##31 ##33 ##32 Stückmenge BWKZ01 BWKZ11 MBST LFBS
VK-L/ Auft. WuLi. WuLi. TeileNr. 6.St. 6.St. 6.St. Mindest laufender
Genehm Datum Datum b.Dat Datum Datum Datum Bestand Bestand
300 9.09.14 9.10.12 9.10.12 30004 900 999 999 22,00 4493,00-
300 9.09.14 9.10.12 9.10.12 30004 900 999 999 22,00 233,00-
Wobei ich halte nur die erste Zeile erwartet hätte.
Gruß
Gregor
-
with zlager as (select lgfa, lgtenr, sum(lglfbs) from lag01pf group by lgfa, lgtenr)
select akanr from ako01pf inner join abw01pf on akfa = bwfa
and akanr = bwanr inner join tst01pf on akfa = tefa and
bwtenr = tetenr left join zlager on lgfa = akfa and lgtenr = bwtenr
Bei Aggregaten ist natürlich auch Group By erforderlich und du mußt natürlich auch die Felder deiner Join-Beziehung mit aufnehmen.
-
Hallo,
das Ergebnis ist interessant, jetzt bekomme ich die datensätze 3 statt 2 mal.
with zlager as (select lgfa, lgtenr, sum(lglfbs) from lag01pf
group by lgfa, lgtenr)
SELECT AKO01PF.AKANR, AKO01PF.AKKTO, AKO01PF.AKNAM1,
AKO01PF.AKKA02, AKO01PF.AKKA14, AKO01PF.AKSA06, AKO01PF.AKKDT2,
AKO01PF.AKKDT3, AKO01PF.AKKDT8, ABW01PF.BWTENR, TST01PF.TE##31,
TST01PF.TE##33, TST01PF.TE##32, ABW01PF.BWSMEN, ABW01PF.BWKZ01,
ABW01PF.BWKZ11 FROM
ako01pf inner join abw01pf on akfa = bwfa and akanr =
bwanr inner join tst01pf on akfa = tefa and bwtenr = tetenr left
join zlager on lgfa = bwfa and lgtenr = bwtenr WHERE
AKO01PF.AKKDJ1 = 1 and akfa = 1 and akanr = 49099
SELECT-Anweisung vollständig verarbeitet.
SA06 KDT2 KDT3 KDT8 TENR ##31 ##33 ##32 Stückmenge BWKZ01 BWKZ11
VK-L/ Auft. WuLi. WuLi. TeileNr. 6.St. 6.St. 6.St.
Genehm Datum Datum b.Dat Datum Datum Datum
300 9.09.14 9.10.12 9.10.12 237526 888 15 50 4320,00
300 9.09.14 9.10.12 9.10.12 237526 888 15 50 4320,00
300 9.09.14 9.10.12 9.10.12 237526 888 15 50 4320,00
Mal abgesehen davon das dann die F4 Funktion nicht mehr möglich ist, frage ich mich gibt es da noch einen besseren Editor der das einfach einfügen erlaubt?
Gruß
Gregor
-
Das liegt aber an deinem Select der Einzeldaten.
Ggf. solltst du den auch summieren und gruppieren.
Mach doch erst mal eine Abfrage deiner Einzelsätze ohne Lager damit du hier die eindeutigen hast (wobei du hier ja den distinct durchaus nehmen kannst) bevor du mit ZLager verbindest.
Ggf. musst du ZLager mit "having sum(lglbsf) > 0" ergänzen und einen Inner Join verwenden, wenn du nur die Teile MIT Bestand haben willst.
Einen Editor für CTE's gibts leider nicht.
-
Hallo, wen ich das dämliche Lager außen vor lasse, habe uch ja auch nur einen Datensatz. Erst wenn das Lager ins Spiel kommt gibt es halt 2 bzw. 3 Sätze (Warum 3 erschließt sich mir nicht). Ich verstehe auch nicht warum die Variante mit distinct nicht funktioniert. Gruß Gregor
-
Was lange währt..
Hallo Fuerchau,
danke für Deine Hilfe, nachdem ich mal ne Nacht drüber geschlafen habe, habe ich das Teil jetzt richtig am Rennen und auch eine View daraus machen können.
Mal wieder eine Menge gelernt.
Gruß
Gregor
PS. Dank natürlich auch an Brigitta & UFK
Similar Threads
-
By Frank Ziegler in forum IBM i Hauptforum
Antworten: 14
Letzter Beitrag: 10-12-06, 10:21
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 29-11-06, 18:07
-
By Azubiiiiii in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 03-08-06, 09:44
-
By Akku in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 10-05-06, 08:07
-
By Hubert Brethauer in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 05-05-06, 12:37
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