Pour le deuxième cas, pourquoi seulement «IN» fonctionne et non «=»?
Han
25
=fonctionnerait si vous compariez à une seule valeur. Cependant, (22978, 23218, 23219)est un tableau et INest nécessaire pour correspondre à une seule des valeurs.
LdTrigger
2
Cela pue vraiment - t-sql ne peut pas gérer un «ou» dans une instruction case. Venez le temps de Microsoft de grandir de l'état de la base de données de jouets.
Rich Bianco
1
"ne peut pas gérer un" ou "dans une déclaration de cas" .. hmmm .... je ne pense pas que j'aie jamais vu un commutateur accepter un "ou" dans n'importe quelle langue. semblerait aller à l'encontre de l'objectif d'un commutateur. quelles langues acceptent "ou" dans un cas?
Heriberto Lugo
2
@Heriberto Lugo Je ne sais pas combien de langues vous connaissez mais il y en a au moins quelques-unes. VB.NET et C # peuvent les utiliser avec une simple séparation par virgule. Il ne vainc rien car il vous évitera de répéter le même code dans plusieurs cas pour rien.
upvoted - cette réponse ajoute de la valeur. Elle correspond mieux à la question de l'OP, et si vous voulez imbriquer des CAS-WHENS, cette syntaxe réduit considérablement le code nécessaire.
Matt Kemp
1
@Leigh J'apprécie cette réponse. Il est agréable d'avoir tous les différents formats dans un seul fil et le rend plus utilisable comme référence.
Jason Wheeler
3
@Bigwheels - Wow .. c'était il y a quelque temps. Je suis probablement en désaccord parce que, logiquement, c'est exactement la même chose que les autres réponses . Cela dit, vous et Matt faites valoir des arguments valables. Si la question était "quelle est la syntaxe correcte en utilisant uniquement OR ", cela fournit une réponse. Cependant, si "réduire la syntaxe nécessaire" était l'objectif, la réponse acceptée est plus compacte. BTW, ce n'est pas un slam sur la réponse de Darren, ce qui est parfaitement valable. Juste mon 0,02 $ :)
Leigh
2
utiliser un INmot 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'
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 23219n'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
CASEWHEN 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'ELSENULLEND), PayRate
FROM dbo.Customer
-- Searched CASE expression:SELECT FirstName,State=(CASEWHEN StateCode ='MP'THEN'Madhya Pradesh'WHEN StateCode ='UP'THEN'Uttar Pradesh'WHEN StateCode ='DL'THEN'Delhi'ELSENULLEND), 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'ELSENULLEND-- Simple CASE expression: UPDATE Customer
SET StateCode =CASEWHEN StateCode ='MP'THEN'Madhya Pradesh'WHEN StateCode ='UP'THEN'Uttar Pradesh'WHEN StateCode ='DL'THEN'Delhi'ELSENULLEND
Vote ascendant en raison de l'inclusion d'un ELSE Saleschamp, 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.
FoxDeploy
3
select id,phno,case gender
when'G'then'M'when'L'then'F'else'No gender'endas gender
from contacts
Pourquoi n'expliquez-vous pas ce qui se fait ici? Il est important de donner des réponses complètes avec des explications, car certains débutants pourraient en avoir besoin pour comprendre comment cela résout le problème
Gerhard Barnard
3
UPDATE table_name
SET column_name=CASEWHEN 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
Bien que ce code puisse résoudre le problème de l'OP, quelques mots d'explication seraient encore plus utiles aux futurs lecteurs.
Thom
-5
Select s.stock_code,s.stock_desc,s.stock_desc_ar,
mc.category_name,s.sel_price,casewhen s.allow_discount=0then'Non Promotional Item'else'Prmotional
item'end'Promotion'From tbl_stock s innerjoin tbl_stock_category c on s.stock_id=c.stock_id
innerjoin tbl_category mc on c.category_id=mc.category_id
where mc.category_id=2and s.isSerialBased=0
Réponses:
Ce format vous oblige à utiliser soit:
Sinon, utilisez:
la source
=
fonctionnerait si vous compariez à une seule valeur. Cependant,(22978, 23218, 23219)
est un tableau etIN
est nécessaire pour correspondre à une seule des valeurs.la source
IN
mot clé est une bien meilleure façonla source
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.
2.
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).
la source
Il y a déjà beaucoup de réponses à ce sujet
CASE
. Je vais vous expliquer quand et comment l'utiliserCASE
.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
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
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
2.Instruction de mise à jour avec l'expression CASE
3.Clause ORDER BY avec expressions CASE
4.Avoir une clause avec l'expression CASE
J'espère que ces cas d'utilisation aideront quelqu'un à l'avenir.
La source
la source
Essayer
la source
la source
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.la source
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éfinircolumn_name
la source
la source