Announcement

Collapse
No announcement yet.

Select mit IF-Bedingungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Select mit IF-Bedingungen

    Halllo zusammen,

    Ich habe eine Spalte, in der befinden sich Zahlenwerte von 0 bis 9. Nun benötige ich die aber in Abhängigkeit voneinander über möglichst 1 Statement.

    Zuerst soll geprüft werden ob es Treffer mit dem Wert = 8 gibt. Wenn das der Fall ist, sollen diese ausgegeben werden und keine Treffer mit Wert = 2-6. Ist das nicht der Fall, soll geprüft werden, ob es Treffer mit Wert = 9 gibt, wenn das der Fall ist, sollen die Treffer mit den Werten 6 und 9 ausgegeben werden. Ist das auch nicht der Fall, sollen die Treffer mit den Werten 2-6 ausgegeben werden.
    Unabhängig davon sollen noch die Werte 0,1,7 ausgewertet werden. Wenn es Treffer mit 0 gibt, so sollen diese zu dne obigen Ergebnissen ausgegeben werden, wenn nicht, danm sollen die Treffer mit den Werten 0 & 7 ausgegeben werden.

    Mein dreister Versuch, die Bedingungen über Select Case komplett anzugeben scheiterte ansatzweise:
    Code:
    select * from Tabelle where 
    (select Case when (select count(Wert) from Tabelle where Wert = 8) > 0 then ' Wert = 8' else 'Wert > 1 and Wert < 7 ' end)
    Nicht, dass der Syntax auf Fehler lief, aber ich habe einfach keine Treffer. Also war es vielleicht doch etwas zu forsch formuliert.

    Folgendes geht aber:
    Code:
    select * from Tabelle where Wert = 
    (select Case when (select count(Wert) from Tabelle where Wert = 8) > 0 then 8 else 3 end)
    Nun könnte ich natürlich viele Bedingungen ineinander verschachteln aber vielleicht hat ja jemand eine bessere Idee.

    Niels

  • #2
    So geht es:

    Code:
    select * from Tabelle where
    (Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert = 8) > 0 then 8 else 9 end)
    or
    Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert > 7 and Wert < 10) > 0 then '' else 2 end)
    or
    Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert > 7 and Wert < 10) > 0 then '' else 3 end)
    or
    Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert > 7 and Wert < 10) > 0 then '' else 4 end)
    or
    Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert > 7 and Wert < 10) > 0 then '' else 5 end)
    or
    Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert > 7 and Wert < 10) > 0 then '' else 6 end)
    or
    Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert = 9) > 0 then 
    		(select Case when (select count(Wert) from Tabelle where Wert = 8) > 0 then '' else 6 end)
    	else '' end)
    or
    Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert = 0) > 0 then 0 else 1 end)
    or
    Wert =
    	(select Case when (select count(Wert) from Tabelle where Wert = 0) > 0 then '' else 7 end)
    )
    and Z_Box = 941 order by Wert, Z_Zeit
    Aber schön ist sicher was anderes?! 10 Select's fressen sicher etwas Performance, auch wenn das bei der in meinem Fall zu erwartenden Anfragedichte völlig uninteressant ist.

    Niels

    Comment

    Working...
    X