Case bedingung mehrfach
17.03.2010, 17:15
#1
Zaungast
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
Case bedingung mehrfach
Hallo,
kann man das ergebniss der case bedingung irgendwie benutzen?
bsp case when a1 = a2 then b else a1 end xy
und dann xy benutzen für eine weitere case abfrage.
ich denke das es nicht geht, wie kann man das lösen? Brauche mehrere case bedingungen auf eine Spalte
-mit ersetzten des alten wertes durch ein neues
-schauen ob der wert in einer anderen tabele vorkommt, wenn ja dann den neuen wert nehmen
Brauche ungefähr 3 bedingungen auf eine spalte.
17.03.2010, 17:25
#2
Stammgast
jum ist offline
Registriert seit: 26.05.2008
Beiträge: 248
jupp das geht zumindest prinzipiell:
Code:
SELECT weiter
FROM (SELECT CASE
WHEN 4 = 5
THEN 'Falsch'
ELSE 'Richtig'
END AS weiter
FROM DUAL)
WEITER
-------
Richtig
1 row selected.
17.03.2010, 17:42
#3
Zaungast
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
das wäre ja nur eine case bedingung? oder???
18.03.2010, 08:26
#4
Stammgast
jum ist offline
Registriert seit: 26.05.2008
Beiträge: 248
Evtl. solltest Du die Frage mit einem Testbeispiel unterlegen, dann wird die Antwort konkreter!
Das Ergebnis der CASE-Anweisung (wie alle anderen "Ergebnisse" einer Abfrage) kann man "verwenden", wenn man daraus eine Unterabfrage (Subquery) baut.
Hier mal ein (nicht praxistaugliches
) Beispiel für den Arcustangens mit Quadranten, in der Subqery wird der Quadrant bestimmt und in der äußeren Abfrage dann passend gerechnet:
Code:
WITH data AS
(SELECT 1.73205080756888 X, 1 Y FROM dual)
SELECT x, y, quadrant,
CASE
WHEN quadrant =1 THEN atan(y/x)*45/atan(1)
WHEN quadrant =2 THEN atan(y/x)*45/atan(1)+180
WHEN quadrant =3 THEN atan(y/x)*45/atan(1)+180
WHEN quadrant =4 THEN atan(y/x)*45/atan(1)+360
ELSE 0 END
AS arctan
FROM
(SELECT X,Y,
CASE
WHEN X > 0 AND Y>=0 THEN 1
WHEN X < 0 AND Y>=0 THEN 2
WHEN X < 0 AND Y <0 THEN 3
WHEN X > 0 AND Y <0 THEN 4
ELSE 0 END
AS quadrant
FROM data);
X Y QUADRANT ARCTAN
---------- ---------- ---------- ----------
1,73205081 1 1 30,0000000
18.03.2010, 13:23
#5
Stammgast
fanderlf ist offline
Registriert seit: 18.07.2008
Beiträge: 1.210
sql Code:
WITH werte AS
(
SELECT 3 wert FROM dual
UNION ALL
SELECT 6 wert FROM dual
UNION ALL
SELECT 10 wert FROM dual
)
SELECT CASE WHEN MOD( (
CASE WHEN wert < 7 THEN wert
ELSE 2
END
) , 2 ) = 1 THEN 'kleiner 7 und ungerade'
ELSE 'größer 7 oder gerade'
END ergebnis,
wert
FROM werte
18.03.2010, 21:11
#6
Zaungast
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
Hallo,
ich versuche mein Problem nochmal an einem Bsp zu verdeutlichen.
select
case when wert1 = wert1 then wert2 else wert1 end ERGEBNISS
so jetzt brauche ich das ERGEBNISS um weiter zu prüfen dann steht weiter
case when ERGEBNISS = XY then ZZ else ZWEITERGBNISS
und dieser ZWEITEERGBNISS brauche ich dann in der where Klausel um diese auf 3 anderen Tabellen zu prüfen.
wert1(+) = ZWEITERGBNISS
wert2(+) = ZWEITERGBNISS
usw.
Ich hab es fast geschafft aber leider noch nicht ganz korrekt.
Habe so angefangen:
with a as (
select case when ....end C)
B as (
select case when A ...end D)
select ....
from A,B
where wert = D
mache hier irgendwo ein verknüpfungsfehler, der beiden select anweisungen. hmmm??
Danke nochmal für eure Tipps!!!!
LG
19.03.2010, 00:15
#7
Stammgast
fanderlf ist offline
Registriert seit: 18.07.2008
Beiträge: 1.210
Meine Berechnung hat 2 geschachtelte CASE Anweisungen
Diese packst Du in ein SELECT und JOINst es mit der Tabelle
19.03.2010, 09:39
#8
Zaungast
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
HI fanderlfr,
kannst du vielleicht die verschachtelte case anweisung an meinem bsp. verdeutlichen. Hab grad ein brett vorm kopf
Danke!!!
19.03.2010, 10:05
#9
Stammgast
fanderlf ist offline
Registriert seit: 18.07.2008
Beiträge: 1.210
Mir fehlt noch die Information wie die 3 Tabellen zusammen hängen.
19.03.2010, 11:50
#10
Zaungast
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
danke es läuft endlich!!!!!!!!!
danke für die Tipps die mich erst auf die richtige idee gebracht hat.
Themen-Optionen
Ansicht
Linear-Darstellung
Forumregeln
Es ist Ihnen nicht erlaubt , neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt , auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt , Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt , Ihre Beiträge zu bearbeiten.
HTML-Code ist aus .
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:47 Uhr.