1.4k Aufrufe
Gefragt in Datenbanken von
Hallo Zusammen,

ich habe vor kurzem begonnen, mich mit SQL (primär Oracle) zu beschäftigen.
Ich stoße nun immer mal wieder auf das gleiche Problem, wofür es hoffentlich eine einfache Lösung gibt:

Erstelle ich in einer Abfrage eines neues Attribut z.B.,

SELECT ((MAX(Jahre) - MIN(Jahre))*365) as DIFF_Tage

dann kann ich in der gleichen SELECT-Anweisung nicht über DIFF_Tage auf die erstellten Felder zugreifen.
Möchte ich also z.B. noch zusätzlich ein Attribut DIFF_Stunden erstellen, kann ich nicht schreiben
...
(DIFF_Tage * 24) as DIFF_Stunden

sondern ich muss schreiben:

((MAX(Jahre) - MIN(Jahre))*365*24)

Würde ich DIFF_Tage verwenden, bekäme ich den Fehler "Invalid identifier".

Da ich teilweise mit verschachtelten DECODE bzw. CASE Befehlen arbeite, wird die ganze Geschichte allerdings sehr schnell unübersichtlich und schwierig zu pflegen.
Daher meine Frage, ob es eine Möglichkeit gibt um in der gleichen SELECT-Anweisung direkt auf die zuvor erstellten Attribute zuzugreifen?

Danke für eure Hilfe

Viele Grüße
ato

2 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo ato,

in Access würde die Formel [DIFF_Tage]*24 lauten, d.h. *24 ist außerhalb der Feldklammern.

Könnte mir vorstellen, dass die SQL-Anweisung in Oracle so aussehen könnte:

...(DIFF_Tage )* 24 as DIFF_Stunden

Ungetestet, da ich Oracle nicht in Verwendung habe.

Gruß

Paul1
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hi,

Ich würde die selects schachteln, Bsp.:
select diffH, diffD, gruppe
from
(select (maxY-minY) * 360 as diffD,
(maxY-minY)*360*24 as diffH,
Gruppe
from
(select gruppe,
Max(jahr) as maxY,
Min(jahr) as minY
From tabelle
Group by gruppe
)
)


So ist das ganze einfacher im Zugriff, die Performance überlass dem Optimierer von Oracle...

Gruß Ralf
...