Question SQL Server: CAS OU QUAND ELSE END => l'OR n'est pas pris en charge


le OR dans le WHEN clause d'un CASE déclaration n'est pas prise 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 

475
2018-03-30 14:45


origine


Réponses:


Ce format exige que vous utilisiez 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 

907
2018-03-30 14:47



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 

217
2018-04-05 03:31



CASE WHEN ebv.db_no  IN (22978, 23218, 23219) THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 

48
2018-03-30 14:47



Vous pouvez utiliser l'une des expressions que WHEN a, mais vous ne pouvez pas les mélanger tous les deux.

  1. WHEN quand_expression

    Est une 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 expression_entrée et chaque expression when_ doivent être identiques ou être une conversion implicite.

  2. WHEN Boolean_expression

    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 pourriez 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).


39
2017-07-09 14:42



Essayer

CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END

29
2018-03-30 14:46



Il y a déjà beaucoup de réponses en ce qui concerne CASE. Je vais expliquer quand et comment utiliser CASE.

Vous pouvez utiliser des expressions CASE n'importe où dans les requêtes SQL. Les expressions CASE peuvent être utilisées dans les instructions SELECT, WHERE, Order by, HAVING, Insert, UPDATE et DELETE.

Une expression CASE a les deux formats suivants:

  1. Expression CASE simple

    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 dans la clause WHEN correspond, l'expression dans la clause THEN sera renvoyée.

    C'est là que la question du PO est en train de tomber. 22978 OR 23218 OR 23219 n'obtiendra pas une valeur égale à l'expression ebv.db_no. C'est pourquoi il donne une erreur. Les types de données de expression_entrée et chaque expression when_ doivent être identiques ou être une conversion implicite.

  2. 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 AND / OR avec dans chaque expression booléenne.

1. instruction SELECT avec des 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 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 

Clause 3.ORDER BY avec des 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.Having 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.

La source 


27
2017-08-10 13:12



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;

23
2018-02-25 12:43



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

1
2017-08-19 11:12



select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender 
from contacts

1
2018-01-15 05:33