O OR
operador na WHEN
cláusula de uma CASE
instrução não é suportado. Como posso fazer isso?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
O OR
operador na WHEN
cláusula de uma CASE
instrução não é suportado. Como posso fazer isso?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Respostas:
Esse formato requer que você use:
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
Caso contrário, use:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
=
funcionaria se você estivesse comparando com um único valor. No entanto, (22978, 23218, 23219)
é uma matriz e IN
é necessário corresponder apenas a um dos valores.
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
palavra-chave é muito melhor maneira
Você pode usar uma das expressões que WHEN possui, mas não pode misturar as duas.
WHEN when_expression
É uma expressão simples à qual a expressão_de_ entrada é comparada quando o formato CASE simples é usado. when_expression é qualquer expressão válida. Os tipos de dados de expressão de entrada e cada expressão de quando devem ser os mesmos ou devem ser uma conversão implícita.
WHEN Boolean_expression
A expressão booleana é avaliada ao usar o formato CASE pesquisado. Expressão booleana é qualquer expressão booleana válida.
Você pode 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
Mas, em qualquer caso, você pode esperar que a classificação da variável seja comparada em uma expressão booleana.
Consulte CASE (Transact-SQL) (MSDN).
Já existem muitas respostas em relação a CASE
. Vou explicar quando e como usar CASE
.
Você pode usar expressões CASE em qualquer lugar nas consultas SQL. As expressões CASE podem ser usadas nas instruções SELECT, WHERE, Order by cláusula, HAVING, Insert, UPDATE e DELETE.
Uma expressão CASE possui os dois formatos a seguir:
Expressão CASE simples
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
Isso compara uma expressão a um conjunto de expressões simples para encontrar o resultado. Essa expressão compara uma expressão à expressão em cada cláusula WHEN para equivalência. Se a expressão na cláusula WHEN for correspondida, a expressão na cláusula THEN será retornada.
É aqui que a questão do OP está caindo. 22978 OR 23218 OR 23219
não receberá um valor igual à expressão ie ebv.db_no. É por isso que está dando um erro. Os tipos de dados de expressão de entrada e cada expressão de quando devem ser os mesmos ou devem ser uma conversão implícita.
Expressões CASE pesquisadas
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
Esta expressão avalia um conjunto de expressões booleanas para encontrar o resultado. Essa expressão permite operadores de comparação e operadores lógicos AND / OR em cada expressão booleana.
Instrução 1.SELECT com expressões 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
Instrução 2.Update com expressão 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 com expressões 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 com expressão 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 esses casos de uso ajudem alguém no futuro.
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
campo, que retorna o valor padrão, se não mais estiver incluído em uma instrução de caso, apropriado para consultas de negócios.
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
= O nome da tabela na qual você deseja executar a operação.
column_name
= O nome da coluna / campo cujo valor você deseja definir.
update_value
= O valor que você deseja definir 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