Die OR
in der WHEN
-Klausel einer CASE
-Anweisung wird nicht unterstützt. Wie kann ich das machen?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Für dieses Format müssen Sie Folgendes verwenden:
CASE ebv.db_no
WHEN 22978 THEN 'WECS 9500'
WHEN 23218 THEN 'WECS 9500'
WHEN 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Ansonsten verwende:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
CASE
WHEN ebv.db_no = 22978 OR
ebv.db_no = 23218 OR
ebv.db_no = 23219
THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
CASE WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Sie können einen der Ausdrücke von WHEN verwenden, aber nicht beide mischen.
WANN wann_Ausdruck
Ist ein einfacher Ausdruck, mit dem input_expression verglichen wird, wenn das einfache CASE-Format verwendet wird. when_expression ist ein beliebiger gültiger Ausdruck. Die Datentypen von input_expression und when_expression müssen identisch sein oder implizit konvertiert werden.
WENN Boolescher_Ausdruck
Wird der Boolesche Ausdruck bei Verwendung des durchsuchten CASE-Formats ausgewertet? Boolean_expression ist ein beliebiger gültiger Boolescher Ausdruck.
Sie könnten programmieren:
1.
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
2.
CASE
WHEN ListPrice = 0 THEN 'Mfg item - not for resale'
WHEN ListPrice < 50 THEN 'Under $50'
WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
ELSE 'Over $1000'
END
In jedem Fall können Sie jedoch davon ausgehen, dass die Rangfolge der Variablen in einem booleschen Ausdruck verglichen wird.
Siehe CASE (Transact-SQL) (MSDN).
Es gibt bereits viele Antworten in Bezug auf CASE
. Ich werde erklären, wann und wie CASE
verwendet wird.
Sie können CASE-Ausdrücke überall in den SQL-Abfragen verwenden. CASE-Ausdrücke können in den Anweisungen SELECT, WHERE, Order by, HAVING, Insert, UPDATE und DELETE verwendet werden.
Ein CASE-Ausdruck hat die folgenden zwei Formate:
Einfacher CASE-Ausdruck
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
Dadurch wird ein Ausdruck mit einer Reihe einfacher Ausdrücke verglichen, um das Ergebnis zu finden. Dieser Ausdruck vergleicht einen Ausdruck mit dem Ausdruck in jeder WHEN-Äquivalenzklausel. Wenn der Ausdruck in der WHEN-Klausel übereinstimmt, wird der Ausdruck in der THEN-Klausel zurückgegeben.
Hier stellt sich die Frage des OP. 22978 OR 23218 OR 23219
erhält keinen Wert, der dem Ausdruck entspricht, d. H. Ebv.db_no. Deshalb gibt es einen Fehler. Die Datentypen von input_expression und when_expression müssen identisch sein oder implizit konvertiert werden.
Durchsuchte CASE-Ausdrücke
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
Dieser Ausdruck wertet eine Reihe von booleschen Ausdrücken aus, um das Ergebnis zu finden. Dieser Ausdruck erlaubt Vergleichsoperatoren und logische Operatoren UND/ODER in jedem Booleschen Ausdruck.
1. SELECT-Anweisung mit CASE-Ausdrücken
--Simple CASE expression:
SELECT FirstName, State=(CASE StateCode
WHEN 'MP' THEN 'Madhya Pradesh'
WHEN 'UP' THEN 'Uttar Pradesh'
WHEN 'DL' THEN 'Delhi'
ELSE NULL
END), PayRate
FROM dbo.Customer
-- Searched CASE expression:
SELECT FirstName,State=(CASE
WHEN StateCode = 'MP' THEN 'Madhya Pradesh'
WHEN StateCode = 'UP' THEN 'Uttar Pradesh'
WHEN StateCode = 'DL' THEN 'Delhi'
ELSE NULL
END), PayRate
FROM dbo.Customer
2.Update-Anweisung mit CASE-Ausdruck
-- Simple CASE expression:
UPDATE Customer
SET StateCode = CASE StateCode
WHEN 'MP' THEN 'Madhya Pradesh'
WHEN 'UP' THEN 'Uttar Pradesh'
WHEN 'DL' THEN 'Delhi'
ELSE NULL
END
-- Simple CASE expression:
UPDATE Customer
SET StateCode = CASE
WHEN StateCode = 'MP' THEN 'Madhya Pradesh'
WHEN StateCode = 'UP' THEN 'Uttar Pradesh'
WHEN StateCode = 'DL' THEN 'Delhi'
ELSE NULL
END
3.ORDER BY-Klausel mit CASE-Ausdrücken
-- Simple CASE expression:
SELECT * FROM dbo.Customer
ORDER BY
CASE Gender WHEN 'M' THEN FirstName END Desc,
CASE Gender WHEN 'F' THEN LastName END ASC
-- Searched CASE expression:
SELECT * FROM dbo.Customer
ORDER BY
CASE WHEN Gender='M' THEN FirstName END Desc,
CASE WHEN Gender='F' THEN LastName END ASC
4.Having-Klausel mit CASE-Ausdruck
-- Simple CASE expression:
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE Gender WHEN 'M'
THEN PayRate
ELSE NULL END) > 180.00
OR MAX(CASE Gender WHEN 'F'
THEN PayRate
ELSE NULL END) > 170.00)
-- Searched CASE expression:
SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
FROM dbo.Customer
GROUP BY StateCode,Gender,FirstName
HAVING (MAX(CASE WHEN Gender = 'M'
THEN PayRate
ELSE NULL END) > 180.00
OR MAX(CASE WHEN Gender = 'F'
THEN PayRate
ELSE NULL END) > 170.00)
Hoffe, diese Anwendungsfälle helfen jemandem in Zukunft.
Versuchen
CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
SELECT
Store_Name,
CASE Store_Name
WHEN 'Los Angeles' THEN Sales * 2
WHEN 'San Diego' THEN Sales * 1.5
ELSE Sales
END AS "New Sales",
Txn_Date
FROM Store_Information;
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender
from contacts
UPDATE table_name
SET column_name=CASE
WHEN column_name in ('value1', 'value2',.....)
THEN 'update_value'
WHEN column_name in ('value1', 'value2',.....)
THEN 'update_value'
END
table_name
= Der Name der Tabelle, für die Sie eine Operation ausführen möchten.
column_name
= Der Name der Spalte/des Feldes, dessen Wert Sie festlegen möchten.
update_value
= Der Wert, den Sie für column_name
festlegen möchten