Werte aus CASE miteinander multiplizieren

wuumbs

Benutzer
Beiträge
5
Hallo zusammen,

zunächst wünsche ich Euch allen ein frohes und gesegnetes neues Jahr 2018.

Bei folgendem Szenario könnte ich Eure Hilfe gebrauchen und freue mich sehr über Tipps. Es liegt folgendes vor:

- Fertigungsdaten von maschinell gefertigten Bauteilen

Anhand verschiedener CASE Befehle vergebe ich Kennziffern für die vorhandenen Fertigungsdaten. Zwei dieser CASE Befehle sehen wie folgt aus:

Code:
/* Kennziffer1 */

                           CASE
                          
                           WHEN Fertigungsdaten.Zeitraum = 'Zeitraum1' THEN '1'

                           WHEN Fertigungsdaten.Zeitraum = 'Zeitraum2' THEN '3'

                           WHEN Fertigungsdaten.Zeitraum = 'Zeitraum3' THEN '2'

                           ELSE '4'

                           END AS Kennziffer1,


/* Kennziffer2 */

                           CASE

                           WHEN HR_Fertigungsdaten.rad = '0.05' THEN '0.9'

                           WHEN HR_Fertigungsparameter.rad = '0.15' THEN '0.7'

                           WHEN HR_Fertigungsparameter.rad = '0.05' THEN '2'

                           ELSE '1'

                           END AS Kennziffer2

Insgesamt vergebe ich 10 verschiedene Kennziffern.
Am Ende dieser CASE Befehle würde ich die einzelnen Kennziffern gerne miteinander multiplizieren und den Wert in einer neuen Spalte 'Multiplikation_Kennziffern' ausgeben lassen.

Kennziffer1 * Kennziffer2 * ... * Kennziffer 10

Leider kann ich auf die einzelnen der CASE Befehle nicht zugreifen.

Mir erscheint das Problem eigentlich gar nicht so kompliziert, doch trotzdem schaffe ich es mit meinem rudimentären Wissen nicht diese Multiplikation und Ausgabe in einer separaten Spalte durchzuführen.

Über Eure Hilfe freue ich mich sehr und verbleibe mit besten Grüßen,
wuumbs
 
Werbung:
Was hast Du denn versucht?

Egal. Das Problem ist, daß die Spalten erst nach Ausführung zur Verfügung stehen, nicht aber schon zu einer Zeit, wo Du auf diese im Select zugreifen kannst. Entweder Du wiederholst für Deine Multiplikation alle Case-Anweisungen, oder Du nringst das in eine Subquery, z.B. via einer CTE:

Code:
test=# select case when 1=1 then 10 else 3 end as a, case when 1=5 then 4 else 8 end as b;
 a  | b
----+---
 10 | 8
(1 row)

test=*# select case when 1=1 then 10 else 3 end as a, case when 1=5 then 4 else 8 end as b, a*b;
FEHLER:  Spalte »a« existiert nicht
LINE 1: ... else 3 end as a, case when 1=5 then 4 else 8 end as b, a*b;
test=*# with x as (select case when 1=1 then 10 else 3 end as a, case when 1=5 then 4 else 8 end as b) select a*b from x;
 ?column?
----------
  80
(1 row)

test=*#
 
Werbung:
Es geht auch ohne das WITH, das kann in einigen Anwendungsfällen probleme machen weil es am Anfang stehen muss. Beispiel:
Code:
SELECT t.*,t.spalte_1 * t.spalte_2 AS spalte_total
FROM (

SELECT (CASE WHEN spalte_1 = 1 THEN 1 ELSE 0 END) AS spalte_1,
(CASE WHEN spalte_2 = 2 THEN 2 ELSE 0 END) AS spalte_2
FROM tabelle

) t
...ergibt natürlich so keinen Sinn aber die Struktur geht.
 
Zurück
Oben