Hallo,
ich kämpfe gerade mit einem etwas blöden
SQL-Statement:
Code:
select kp.vorgangs_nr as "VGNR1",
kp.artikel_nr as "ArtikelNr",
kp.bestaetigter_termin as "Bestaetigter Termin 1",
(select sum(menge)
from (
select ek.artikel_nr as Artikel,
(ek.menge_soll - ek.menge_lager_ist - ek.menge_wareneingang_ist) as Menge,
ek.bestaetigter_termin as Datum
from pekp ek
where ek.artikel_nr = kp.artikel_nr
and ek.bestaetigter_termin < kp.bestaetigter_termin
and ek.vorgangs_art = 'BE'
and ek.bestellpositions_status < 6
union all
select sp.komponenten_artikel_nr as Artikel,
-1 * (sp.entnahme_menge - sp.entnahme_menge_ist) as Menge,
sp.entnahme_termin_gre as Datum
from pfsp sp
where sp.entnahme_termin_gre < kp.bestaetigter_termin
and sp.komponenten_artikel_nr = kp.artikel_nr */
and sp.rueckmelde_status between 1 and 3
)
) as "Deckung"
from pekp kp
Das Statement ist hier jetzt etwas vereinfacht: im innersten Block werden noch mehr Tabellen angezogen und deren Werte über "union all" zu einer Ergebnismenge vereint.
Das ganze dient als Berechnung des theoretischen Lagerbestandes des jeweiligen Artikels zum Zeitpunkt des bestätigten Liefertermines einer Bestellung.
Ich habe also quasi ein Subquery mit einem Subqery, dessen innerster Block von den Spaltenwerten des äußersten Selects abhängig ist.
Was leider in Oracle nicht geht
(Ora-Fehler ORA-00904: "KP"."BESTAETIGER_TERMIN": ungültiger Bezeichner)
Natürlich könnte ich jetzt den innersten Block als Stored-Function schreiben, aber für eine einzige Abfrage, die nur alle paar Wochen von einem einzigen Mitarbeiter aufgerufen wird und sonst niemanden interessiert, ist mir das zu viel Aufwand in der Pflege (diese Funktion müsste in 9 Datenbereichen gepflegt werden).
Irgendwelche Alternativen?