[mssql] : CASE WHEN AS - Feld in FROM verwenden
-
Hallo,
kann man irgendwie das Ergebnis einer CASE WHEN Abfrage innerhalb des selben Statements weiter verwenden?
Ungefähr so:
SELECT CASE WHEN FeldA=0 THEN 0 ELSE 1 END AS 'MeinWert' FROM Tabelle WHERE 'MeinWert' = 1
Vielen Dank im Voraus
VlG
-
Das, was im CASE WHEN abgefragt wird, kann man genauso in der WHERE-Klausel abprüfen. In deinem Beispiel wäre folgendes wohl besser:
SELECT FeldA AS MeinWert FROM Tabelle WHERE FeldA != 0
Aber wie dem auch sei, sollte auch das gehen
SELECT CASE WHEN FeldA=0 THEN 0 ELSE 1 END AS MeinWert FROM Tabelle HAVING MeinWert = 1
Hab leider grad nur mySQL zur Hand. Aber sollte so auch in MSSQL funktionieren
-
Hallo,
danke für die Antwort, aber leider klappt das nicht so ganz
SELECT CASE WHEN CAST([FeldA] AS Integer)+CAST([FeldB] AS Integer)=10 THEN 'wahr' ELSE 'falsch' AS Ergebnis FROM [Tabelle] WHERE Ergebnis='wahr'
Ergebnis der Abfrage: unbekannte Spalte 'Ergebnis'
VlG
-
Schau dir die Beispiele GENAU an. Du hast das gleiche wie in Post 1 geschrieben
-
Das ändert aber Nichts am Ergebnis! Ich brauche für mein Problem eine Lösung und kein Workaround
-
hmmz schrieb:
Das ändert aber Nichts am Ergebnis!
Ich enttäusche dich nur ungern, aber des ändert schon was am Ergebnis.
Wenn dein erstes Beispiel nicht funktioniert, warum sollte dann dein 2. funktionieren ?
Allein schon, weil du das "END" zwischen 'false' und AS vergessen hast.hmmz schrieb:
Ich brauche für mein Problem eine Lösung und kein Workaround
Aber mal ganz im Ernst. "HAVING" hat hier nichts mit Workaround zu tun.
Im Gegenteil. Das Schlüsselwort ist geradezu prädestiniert, eine Auswahl anhand der Ergebnisse im SELECT zu filtern (z.B. auf Basis von Aggregatfunktionen o.ä.).Nutze doch die Möglichkeiten, die dir die Sprache zur Verfügung stellt und sei nicht so stur, das es so gehen muss, wie du es hast
-
Und trotzdem löst es mein Problem nicht! An der Stelle mache ich etwas ganz anderes als wie ich es machen will. Beantworte doch bitte einfach die Frage Wenn die Antwort: "Nein, es gibt keinen Weg" lautet kann man sich immer noch weitere Gedanken machen. Ich denk mir doch das ganze nicht aus. Und es hat auch seinen Grund warum ich die Frage stelle, und nicht selbst den simplen Weg gegangen bin, den du mir gezeigt hast!
VlG
-
Gut, wie der Herr wünschen
Man kann keinen Spaltenalias in der WHERE-Klausel verwenden.
Denn unter Umständen wäre es nicht möglich, dass der Wert für den Alias bestimmt werden kann, wenn die WHERE-Klausel ausgeführt wird.
-
Du kannst es so schreiben:
SELECT MeinWert FROM (SELECT (CASE WHEN FeldA=0 THEN 0 ELSE 1 END) AS 'MeinWert' FROM Tabelle) AS foo WHERE MeinWert = 1
Ist natürlich so gar nicht performant, da nichts mehr über nen Index optimiert werden kann.
Oder du machst eine View, die dann die Spalte "MeinWert" definiert, und fragst statt der "Tabelle" eben die View ab.