w3schools - if sql server
SQL Server: CASO CUANDO O ENTONCES OTRA VEZ=> el OR no es compatible (10)
El OR
en la cláusula WHEN
de una sentencia CASE
no es compatible. ¿Cómo puedo hacer esto?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN ''WECS 9500''
ELSE ''WECS 9520''
END as wecs_system
Ese formato requiere que uses:
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
De lo contrario, utilice:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN ''WECS 9500''
ELSE ''WECS 9520''
END as wecs_system
Puedes usar una de las expresiones que tiene WHEN, pero no puedes mezclar ambas.
CUÁNDO cuándo_expresión
Es una expresión simple con la que se compara input_expression cuando se usa el formato CASE simple. when_expression es cualquier expresión válida. Los tipos de datos de input_expression y de cuándo when_expression deben ser iguales o deben ser una conversión implícita.
Cuando boolean_expression
Es la expresión booleana evaluada cuando se usa el formato CASE buscado. Boolean_expression es cualquier expresión booleana válida.
Podrías programar:
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
Pero en cualquier caso, puede esperar que la clasificación de variables se comparará en una expresión booleana.
Ver CASE (Transact-SQL) (MSDN).
Tratar
CASE WHEN ebv.db_no IN (22978,23218,23219) THEN ''WECS 9500'' ELSE ''WECS 9520'' END
Ya hay muchas respuestas con respecto a CASE
. Te explicaré cuándo y cómo usar CASE
.
Puedes usar expresiones CASE en cualquier lugar de las consultas SQL. Las expresiones CASE se pueden usar dentro de la instrucción SELECT, las cláusulas WHERE, la cláusula Order by, las cláusulas HAVING, Insert, UPDATE y DELETE.
Una expresión CASE tiene los siguientes dos formatos:
Expresión CASE simple
CASE expression WHEN expression1 THEN Result1 WHEN expression2 THEN Result2 ELSE ResultN END
Esto compara una expresión con un conjunto de expresiones simples para encontrar el resultado. Esta expresión compara una expresión con la expresión en cada cláusula WHEN para equivalencia. Si la expresión dentro de la cláusula WHEN coincide, se devolverá la expresión en la cláusula THEN.
Aquí es donde está cayendo la pregunta del OP.
22978 OR 23218 OR 23219
no obtendrán un valor igual a la expresión, es decir, ebv.db_no. Es por eso que está dando un error. Los tipos de datos de input_expression y de cuándo when_expression deben ser iguales o deben ser una conversión implícita.Expresiones CASE buscadas
CASE WHEN Boolean_expression1 THEN Result1 WHEN Boolean_expression2 THEN Result2 ELSE ResultN END
Esta expresión evalúa un conjunto de expresiones booleanas para encontrar el resultado. Esta expresión permite operadores de comparación y operadores lógicos Y / O con cada expresión booleana.
Sentencia 1.SELECT con expresiones 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.Actualización actualizada con expresión 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
Cláusula 3.ORDER BY con expresiones 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.Contar la cláusula con expresión 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)
Espero que estos casos de uso ayuden a alguien en el futuro.
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
CASE WHEN ebv.db_no IN (22978, 23218, 23219) THEN ''WECS 9500''
ELSE ''WECS 9520''
END as wecs_system
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;
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
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
select id,phno,case gender
when ''G'' then ''M''
when ''L'' then ''F''
else
''No gender''
end
as gender
from contacts