Einzelnen Beitrag anzeigen

hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#1

Oracle: Spaltenwert über 2 Ebenen in Subqueries durchreichen

  Alt 20. Jun 2017, 13:20
Datenbank: Oracle • Version: 10G R2 • Zugriff über: SQL
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?
  Mit Zitat antworten Zitat