Der OR
Operator 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
Der OR
Operator 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
Antworten:
Für dieses Format müssen Sie entweder 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
Andernfalls verwenden Sie:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
=
würde funktionieren, wenn Sie mit einem einzelnen Wert vergleichen würden. Ist (22978, 23218, 23219)
jedoch ein Array und IN
muss nur mit einem der Werte übereinstimmen.
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
IN
Keyword ist viel besseren Weg
Sie können einen der Ausdrücke von WHEN verwenden, aber Sie können nicht beide mischen.
WANN wenn_Ausdruck
Ist ein einfacher Ausdruck, mit dem input_expression verglichen wird, wenn das einfache CASE-Format verwendet wird. when_expression ist ein gültiger Ausdruck. Die Datentypen von input_expression und jeder when_expression müssen identisch sein oder eine implizite Konvertierung sein.
WENN Boolescher_Ausdruck
Wird der Boolesche Ausdruck ausgewertet, wenn das gesuchte CASE-Format verwendet wird? Boolean_expression ist ein 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 erwarten, dass die Variablenrangfolge 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 man es benutzt CASE
.
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
Dies vergleicht einen Ausdruck mit einer Reihe einfacher Ausdrücke, um das Ergebnis zu finden. Dieser Ausdruck vergleicht einen Ausdruck mit dem Ausdruck in jeder WHEN-Klausel für die Äquivalenz. Wenn der Ausdruck in der WHEN-Klausel übereinstimmt, wird der Ausdruck in der THEN-Klausel zurückgegeben.
Hier fällt die Frage des OP. 22978 OR 23218 OR 23219
erhält keinen Wert, der dem Ausdruck ie ebv.db_no entspricht. Deshalb gibt es einen Fehler. Die Datentypen von input_expression und jeder when_expression müssen identisch sein oder eine implizite Konvertierung sein.
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 finden. Dieser Ausdruck ermöglicht Vergleichsoperatoren und logische Operatoren AND / OR mit 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, dass diese Anwendungsfälle jemandem in Zukunft helfen werden.
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;
ELSE Sales
Felds, das den Standardwert zurückgibt, wenn er nicht in einer case-Anweisung enthalten ist, die für Geschäftsanfragen geeignet ist.
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 Felds, dessen Wert Sie festlegen möchten.
update_value
= Der Wert, den Sie einstellen möchten column_name
Select s.stock_code,s.stock_desc,s.stock_desc_ar,
mc.category_name,s.sel_price,
case when s.allow_discount=0 then 'Non Promotional Item' else 'Prmotional
item' end 'Promotion'
From tbl_stock s inner join tbl_stock_category c on s.stock_id=c.stock_id
inner join tbl_category mc on c.category_id=mc.category_id
where mc.category_id=2 and s.isSerialBased=0