L' OR
opérateur dans la WHEN
clause d'une CASE
instruction n'est pas pris en charge. Comment puis-je faire ceci?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
L' OR
opérateur dans la WHEN
clause d'une CASE
instruction n'est pas pris en charge. Comment puis-je faire ceci?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Réponses:
Ce format vous oblige à utiliser soit:
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
Sinon, utilisez:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
=
fonctionnerait si vous compariez à une seule valeur. Cependant, (22978, 23218, 23219)
est un tableau et IN
est nécessaire pour correspondre à une seule des valeurs.
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
mot clé est une bien meilleure façon
Vous pouvez utiliser l'une des expressions de WHEN, mais vous ne pouvez pas mélanger les deux.
QUAND quand_expression
Expression simple à laquelle expression_entrée est comparée lorsque le format CASE simple est utilisé. when_expression est une expression valide. Les types de données de input_expression et chaque when_expression doivent être identiques ou doivent être une conversion implicite.
QUAND expression_booléenne
L'expression booléenne est-elle évaluée lors de l'utilisation du format CASE recherché. Boolean_expression est une expression booléenne valide.
Vous pouvez programmer:
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
Mais dans tous les cas, vous pouvez vous attendre à ce que le classement des variables soit comparé dans une expression booléenne.
Voir CASE (Transact-SQL) (MSDN).
Il y a déjà beaucoup de réponses à ce sujet CASE
. Je vais vous expliquer quand et comment l'utiliser CASE
.
Vous pouvez utiliser des expressions CASE n'importe où dans les requêtes SQL. Les expressions CASE peuvent être utilisées dans l'instruction SELECT, les clauses WHERE, la clause Order by, les clauses HAVING, les instructions Insert, UPDATE et DELETE.
Une expression CASE a les deux formats suivants:
Expression simple CASE
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
Cela compare une expression à un ensemble d'expressions simples pour trouver le résultat. Cette expression compare une expression à l'expression de chaque clause WHEN pour l'équivalence. Si l'expression de la clause WHEN correspond, l'expression de la clause THEN sera renvoyée.
C'est là que la question du PO tombe. 22978 OR 23218 OR 23219
n'obtiendra pas une valeur égale à l'expression ie ebv.db_no. C'est pourquoi cela donne une erreur. Les types de données de input_expression et chaque when_expression doivent être identiques ou doivent être une conversion implicite.
Expressions CASE recherchées
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
Cette expression évalue un ensemble d'expressions booléennes pour trouver le résultat. Cette expression autorise les opérateurs de comparaison et les opérateurs logiques ET / OU avec dans chaque expression booléenne.
Instruction 1.SELECT avec expressions CASE
--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.Instruction de mise à jour avec l'expression CASE
-- 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.Clause ORDER BY avec expressions CASE
-- 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.Avoir une clause avec l'expression CASE
-- 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)
J'espère que ces cas d'utilisation aideront quelqu'un à l'avenir.
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
champ, qui renvoie la valeur par défaut s'il n'est pas inclus dans une déclaration de cas, appropriée pour les requêtes métier.
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
= Le nom de la table sur laquelle vous souhaitez effectuer l'opération.
column_name
= Le nom de la colonne / du champ dont vous souhaitez définir la valeur.
update_value
= La valeur que vous souhaitez définir 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