Einzelnen Beitrag anzeigen

Benutzerbild von smallie
smallie

Registriert seit: 8. Jan 2013
19 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Oracle: Spaltenwert über 2 Ebenen in Subqueries durchreichen

  Alt 20. Jun 2017, 19:49
Hallo,
ich kämpfe gerade mit einem etwas blöden SQL-Statement:

<schnipp>

Irgendwelche Alternativen?
Das sieht für mich nach WITH-Clause aus.

Damit lassen sich "im Vorübergehen" Unterabfragen mit Namen versehen, die sich im Weiteren wie eine Tabelle oder View ansprechen lassen.

Code:
with EKSP as
            (   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.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.rueckmelde_status between 1 and 3
            )

select kp.vorgangs_nr as "VGNR1",
       kp.artikel_nr as "ArtikelNr",
       kp.bestaetigter_termin as "Bestaetigter Termin 1",
       sum(EKSP.menge)
  from pekp kp, EKSP
      where EKSP.datum < kp.bestaetigter_termin
        and EKSP.artikel = kp.artikel_nr
  group by kp.vorgangs_nr, kp.artikel_nr, kp.bestaetigter_termin
So ungefähr.

Mit dem Ansatz sollten sich auch die weiteren Subqueries bändigen lassen.

Mit mehreren Unterabfragen sieht die Syntax so aus:
Code:
with FOO as
   (  select some_fields from some_tables ),

     BAR as
   (  select some_fields from some_other_tables ) -- kein Komma hier

select f.some_fields, b.some_fields               -- erstes Statement muß select sein
  from FOO f, BAR b
  where f.some_id = b.some_id
Wenn die Unterabfragen mehrmals durchgenudelt werden müssten, ist die WITH-Clause auch um ein Hauseck schneller.
"There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors."
  Mit Zitat antworten Zitat