El OR
Operator in der WHEN
Klausel einer CASE
Anweisung wird nicht unterstützt. Wie kann ich dies tun?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
El OR
Operator in der WHEN
Klausel einer CASE
Anweisung wird nicht unterstützt. Wie kann ich dies tun?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Sie können einen der Ausdrücke verwenden, die WHEN hat, aber Sie können nicht beide mischen.
WHEN wenn_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 jedem when_expression müssen gleich sein oder es muss sich um eine implizite Konvertierung handeln.
WHEN Boolescher_Ausdruck
Wird der boolesche Ausdruck bei Verwendung des gesuchten 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
Aber in jedem Fall können Sie davon ausgehen, dass die Rangfolge der Variablen in einem booleschen Ausdruck verglichen wird.
Siehe CASE (Transact-SQL) (MSDN).
Es gibt bereits eine Vielzahl von Antworten auf folgende Fragen CASE
. Ich werde erklären, wann und wie man CASE
.
Sie können CASE-Ausdrücke überall in den SQL-Abfragen verwenden. CASE-Ausdrücke können in der SELECT-Anweisung, den WHERE-Klauseln, der Order-by-Klausel, den HAVING-Klauseln sowie den Anweisungen 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
Dabei wird ein Ausdruck mit einer Reihe von einfachen Ausdrücken verglichen, um das Ergebnis zu ermitteln. Dieser Ausdruck vergleicht einen Ausdruck mit dem Ausdruck in jeder WHEN-Klausel auf Gleichwertigkeit. Wenn der Ausdruck in der WHEN-Klausel übereinstimmt, wird der Ausdruck in der THEN-Klausel zurückgegeben.
Genau hier setzt die Frage des Auftraggebers an. 22978 OR 23218 OR 23219
erhält keinen Wert, der dem Ausdruck ebv.db_no entspricht. Deshalb wird ein Fehler ausgegeben. Die Datentypen von input_expression und jedem when_expression müssen gleich sein oder es muss sich um eine implizite Konvertierung handeln.
Gesuchte 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 ermitteln. Dieser Ausdruck erlaubt Vergleichsoperatoren und die logischen Operatoren AND/OR 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. aktualisierte 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. die 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. nach einer 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)
Ich hoffe, dass diese Anwendungsfälle in Zukunft jemandem helfen werden.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.