Para o segundo caso, por que apenas 'IN' funciona e não '='?
Han
25
=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.
LdTrigger
2
Isso realmente fede - o t-sql não consegue lidar com um "ou" em uma instrução de caso. Chegou a hora da Microsoft crescer a partir do status do banco de dados de brinquedos.
Rich Bianco
1
"não pode lidar com um" ou "em uma declaração de caso" .. hmmm .... eu acho que nunca vi um switch aceitar um "ou" em qualquer idioma. parece derrotar o propósito de uma troca. quais idiomas aceitam "ou" em um caso?
Heriberto Lugo 24/01
2
@Heriberto Lugo Não sei quantas línguas você conhece, mas existem pelo menos algumas. VB.NET e C # podem usá-los com simples separação por vírgula. Ele não derrota nada, pois evita que você repita o mesmo código em vários casos por nada.
votado - esta resposta agrega valor. Ele se encaixa melhor na pergunta do OP e, se você deseja aninhar alguns CASE-WHENS, essa sintaxe reduz consideravelmente o código necessário.
Matt Kemp
1
@ Leigh Agradeço esta resposta. É bom ter todos os diferentes formatos em um thread e o torna mais útil como referência.
Jason Wheeler
3
@ Bigwheels - Uau .. isso foi há um tempo atrás. Provavelmente discordei porque, logicamente, é exatamente o mesmo que outras respostas . Dito isto, você e Matt fazem pontos válidos. Se a pergunta for "qual é a sintaxe correta usando somente OR ", isso fornece uma resposta. No entanto, se "reduzir a sintaxe necessária" era o objetivo, a resposta aceita é mais compacta. Aliás, não é um slam na resposta de Darren, que é perfeitamente válida. Just my $ 0,02 :)
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'
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 23219nã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
CASEWHEN 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'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
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'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
Voto a favor devido à inclusão de um ELSE Salescampo, 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.
FoxDeploy
3
select id,phno,case gender
when'G'then'M'when'L'then'F'else'No gender'endas gender
from contacts
Por que você não explica o que está sendo feito aqui? É importante dar respostas completas com explicações como alguns novatos pode precisar que, a fim de compreender como isso resolver o problema
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 = 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
Embora esse código possa resolver o problema do OP, algumas palavras explicativas seriam ainda mais úteis para futuros leitores.
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
Respostas:
Esse formato requer que você use:
Caso contrário, use:
fonte
=
funcionaria se você estivesse comparando com um único valor. No entanto,(22978, 23218, 23219)
é uma matriz eIN
é necessário corresponder apenas a um dos valores.fonte
IN
palavra-chave é muito melhor maneirafonte
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
2)
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).
fonte
Já existem muitas respostas em relação a
CASE
. Vou explicar quando e como usarCASE
.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
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
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
Instrução 2.Update com expressão CASE
Cláusula 3.ORDER BY com expressões CASE
4.Having Clause com expressão CASE
Espero que esses casos de uso ajudem alguém no futuro.
Fonte
fonte
Tentar
fonte
fonte
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.fonte
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 definircolumn_name
fonte
fonte