AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Oracle: Spaltenwert über 2 Ebenen in Subqueries durchreichen
Thema durchsuchen
Ansicht
Themen-Optionen

Oracle: Spaltenwert über 2 Ebenen in Subqueries durchreichen

Ein Thema von hsg · begonnen am 20. Jun 2017 · letzter Beitrag vom 21. Jun 2017
 
Benutzerbild von smallie
smallie

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

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

  Alt 20. Jun 2017, 18: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz