it-swarm.com.de

SQL Server - Case-Anweisung

Ich bin fast sicher, dass Sie dies im Kontext der Case-Anweisung nicht tun können, und ich konnte keine Dokumentation dazu finden.

SELECT CASE WHEN testValue > 2 
THEN testValue(Without Repeating it) ELSE FailValue)
END 
FROM Table 

Ein besseres gründlicheres Beispiel:

Select CASE WHEN (Foo-stuff+bar) > 2 
THEN Conditional statement without >2 Else "Fail"
END 
FROM TABLE

Ich suche nach einer Möglichkeit, eine Auswahl zu erstellen, ohne die bedingte Abfrage zu wiederholen.

EDIT: Aufgrund eines schlechten Beispiels meinerseits und dem Fehlen von Antworten, die ich gesucht habe:

testValue = (Table.A / Table.B) * Table.C Table.D

SELECT CASE WHEN testValue > 2 
THEN testValue ELSE FailValue)
END 
FROM Table 
20
Elias

So

DECLARE @t INT=1

SELECT CASE
            WHEN @t>0 THEN
                CASE
                    WHEN @t=1 THEN 'one'
                    ELSE 'not one'
                END
            ELSE 'less than one'
        END

BEARBEITEN: Nachdem ich mir die Frage genauer angesehen habe, denke ich, ist die beste Möglichkeit, eine Funktion zu erstellen, die den Wert berechnet. Auf diese Weise haben Sie an mehreren Stellen, an denen die Berechnung ausgeführt werden muss, nur einen Punkt, um die Logik zu erhalten.

20

Die Abfrage kann etwas einfacher geschrieben werden:

DECLARE @T INT = 2 

SELECT CASE 
         WHEN @T < 1 THEN 'less than one' 
         WHEN @T = 1 THEN 'one' 
         ELSE 'greater than one' 
       END T
19
Gidil

Ich suche nach einer Möglichkeit, eine Auswahl zu erstellen, ohne die bedingte Abfrage zu wiederholen.

Ich gehe davon aus, dass Sie Foo-stuff+bar nicht wiederholen möchten. Sie können Ihre Berechnung in eine abgeleitete Tabelle einfügen:

SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END 
FROM (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable) AS a

Ein allgemeiner Tabellenausdruck würde genauso gut funktionieren:

WITH a AS (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable)
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END    
FROM a

Außerdem sollte jeder Teil Ihres Switches denselben Datentyp zurückgeben, sodass Sie möglicherweise einen oder mehrere Fälle anwenden müssen.

2
Tim Lehner

Wir können Case-Anweisung wie folgt verwenden

select Name,EmailId,gender=case 
when gender='M' then 'F'
when gender='F' then 'M'
end
 from [dbo].[Employees]

WIR können es auch so machen.

select Name,EmailId,case gender
when 'M' then 'F'
when 'F' then 'M'
end
 from [dbo].[Employees]
0
Debendra Dash