Zurück   Entwickler-Forum > Datenbanken > Oracle

Antwort
 
Themen-Optionen Ansicht

Case bedingung mehrfach
Alt 17.03.2010, 17:15   #1
chicco100
Zaungast
 
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
chicco100 befindet sich auf einem aufstrebenden Ast
Standard 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.
  Mit Zitat antworten

Anzeige

Alt 17.03.2010, 17:25   #2
jum
Stammgast
 
jum ist offline
Registriert seit: 26.05.2008
Beiträge: 248
jum befindet sich auf einem aufstrebenden Ast
Standard

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.
  Mit Zitat antworten

Alt 17.03.2010, 17:42   #3
chicco100
Zaungast
 
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
chicco100 befindet sich auf einem aufstrebenden Ast
Standard

das wäre ja nur eine case bedingung? oder???
  Mit Zitat antworten

Alt 18.03.2010, 08:26   #4
jum
Stammgast
 
jum ist offline
Registriert seit: 26.05.2008
Beiträge: 248
jum befindet sich auf einem aufstrebenden Ast
Standard

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
  Mit Zitat antworten

Alt 18.03.2010, 13:23   #5
fanderlf
Stammgast
 
fanderlf ist offline
Registriert seit: 18.07.2008
Beiträge: 1.210
fanderlf befindet sich auf einem aufstrebenden Ast
Standard

sql Code:
  1. WITH werte AS
  2. (
  3.   SELECT 3 wert FROM dual
  4.   UNION ALL
  5.   SELECT 6 wert FROM dual
  6.   UNION ALL
  7.   SELECT 10 wert FROM dual
  8. )
  9. SELECT CASE WHEN MOD((
  10.                       CASE WHEN wert < 7 THEN wert
  11.                       ELSE 2
  12.                       END
  13.                      ),2) = 1 THEN 'kleiner 7 und ungerade'
  14.             ELSE 'größer 7 oder gerade'
  15.             END ergebnis,
  16. wert
  17. FROM werte
  Mit Zitat antworten

Alt 18.03.2010, 21:11   #6
chicco100
Zaungast
 
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
chicco100 befindet sich auf einem aufstrebenden Ast
Standard

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
  Mit Zitat antworten

Alt 19.03.2010, 00:15   #7
fanderlf
Stammgast
 
fanderlf ist offline
Registriert seit: 18.07.2008
Beiträge: 1.210
fanderlf befindet sich auf einem aufstrebenden Ast
Standard

Meine Berechnung hat 2 geschachtelte CASE Anweisungen

Diese packst Du in ein SELECT und JOINst es mit der Tabelle
  Mit Zitat antworten

Alt 19.03.2010, 09:39   #8
chicco100
Zaungast
 
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
chicco100 befindet sich auf einem aufstrebenden Ast
Standard

HI fanderlfr,

kannst du vielleicht die verschachtelte case anweisung an meinem bsp. verdeutlichen. Hab grad ein brett vorm kopf

Danke!!!
  Mit Zitat antworten

Alt 19.03.2010, 10:05   #9
fanderlf
Stammgast
 
fanderlf ist offline
Registriert seit: 18.07.2008
Beiträge: 1.210
fanderlf befindet sich auf einem aufstrebenden Ast
Standard

Mir fehlt noch die Information wie die 3 Tabellen zusammen hängen.
  Mit Zitat antworten

Alt 19.03.2010, 11:50   #10
chicco100
Zaungast
 
chicco100 ist offline
Registriert seit: 08.03.2010
Beiträge: 22
chicco100 befindet sich auf einem aufstrebenden Ast
Standard

danke es läuft endlich!!!!!!!!!

danke für die Tipps die mich erst auf die richtige idee gebracht hat.
  Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu



Alle Zeitangaben in WEZ +2. Es ist jetzt 07:47 Uhr.



© 1995–2009 Software & Support Verlag GmbH. Vervielfältigung nur mit Genehmigung des Verlags.