Thema: Syntaxanfrage

Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#3

AW: Syntaxanfrage

  Alt 15. Aug 2016, 12:58
Wenn ich die Aufgabenstellung richtig verstehe, geht es doch darum, mehrere nacheinander ermittelte Werte aus einer Tabelle im Ergebnis nebeneinander darzustellen.

Insgesamt erscheint mir das Statement sehr komplex, so dass ich nicht nachvollziehen kann, warum das so und nicht anders gelöst wurde.

Als erstes würd' ich mal diese beiden Zeilen wegwerfen, sie sind überflüssig:
SQL-Code:
select 0 a_c, 0 k_c,0 w_c,0 misc_c from dual ------- einmal Basisdaten bitte
union
Durch das Max() gehen die Werte verloren, es sei denn, im "Rest" kämen nur negative Werte vor, dann blieben die Nullen als Maximalwerte übrig.
Es könnte eventuell auch sein, dass das erforderlich ist, sofern der "Rest" eine leere Ergebnismenge liefert.
Wäre das im Rahmen des Möglichen?
(Edit: Aber das müsste das NVL doch eigentlich verhindern? Oder?)

Den Teil, in dem die Maximalwerte ermittelt werden, würd' ich so schreiben:
SQL-Code:
select max(a_c) DEM_SummeA
      ,max(k_c) DEM_SummeK
      ,max(w_c) DEM_SummeW
      ,max(misc_c) DEM_Summe_
      ,max(a_c)+max(k_c)+max(w_c)+max(misc_c) DEM_Summe
from
(
  select nvl(cnt,0) a_c, 0 w_c, 0 k_c, 0 Misc_c from bucnt where bu='A'
  union all
  select 0 a_c, 0 w_c, nvl(cnt,0) k_c, 0 Misc_c from bucnt where bu='B'
  union all
  select 0 a_c, nvl(cnt,0) w_c, 0 k_c, 0 Misc_c from bucnt where bu='L'
  union all
  select 0 a_c, 0 w_c, 0 k_c, cnt misc_c from bucnt where ((bu not in ('A','B','L')) or bu is null
)
(Hoffentlich hab' ich da jetzt nix wesentliches übersehen.)

Nachtrag:

Mir fällt gerade auf, dass das "full outer join" ja zu einem kartesischen Produkt führt. Man bekommt also in der Ergebnismenge alle Spalten aller Selects, ohne sie einzeln im Statement "aufführen" zu müssen.
Da schreib' ich lieber ein bisserl mehr und hab' es insgesamt etwas übersichtlicher. Aber das ist dann wohl auch etwas "Geschmacksfrage"

Geändert von nahpets (15. Aug 2016 um 13:25 Uhr) Grund: Noch was nachgeschoben, zu früh abgeschickt.
  Mit Zitat antworten Zitat