Para el segundo caso, ¿por qué solo funciona 'IN' y no '='?
Han
25
=funcionaría si estuvieras comparando con un solo valor. Sin embargo, (22978, 23218, 23219)es una matriz y INes necesaria para que coincida solo con uno de los valores.
LdTrigger
2
Esto realmente apesta: t-sql no puede manejar un "o" en una declaración de caso. Venga a tiempo de Microsoft para crecer desde el estado de la base de datos de juguetes
Rich Bianco
1
"No puedo manejar un" o "en una declaración de caso" ... hmmm ... no creo haber visto un interruptor aceptar un "o" en ningún idioma. parecería derrotar el propósito de un cambio. ¿Qué idiomas aceptan "o" en un caso?
Heriberto Lugo
2
@Heriberto Lugo No sé cuántos idiomas sabes pero hay al menos algunos. VB.NET y C # pueden usarlos con una simple separación de comas. No vence a nada, ya que te salvará de repetir el mismo código en múltiples casos por nada.
upvoted: esta respuesta agrega valor. Se ajusta más a la pregunta del OP, y si desea anidar algunos CASE-WHENS, esta sintaxis reduce considerablemente el código necesario.
Matt Kemp
1
@Leigh, agradezco esta respuesta. Es bueno tener todos los formatos diferentes en un hilo y lo hace más útil como referencia.
Jason Wheeler
3
@Bigwheels - Wow ... esto fue hace un tiempo. Probablemente no estuve de acuerdo porque, lógicamente, es exactamente lo mismo que otras respuestas . Dicho esto, tú y Matt hacen puntos válidos. Si la pregunta era "¿cuál es la sintaxis correcta usando OR solamente ", esto proporciona una respuesta. Sin embargo, si el objetivo era "reducir la sintaxis necesaria", la respuesta aceptada es más compacta. Por cierto, no es un golpe en la respuesta de Darren, que es perfectamente válido. Just my $ 0.02 :)
Puede usar una de las expresiones que tiene WHEN, pero no puede mezclar ambas.
CUANDO cuando_expresión
Es una expresión simple con la que input_expression se compara cuando se usa el formato CASE simple. when_expression es cualquier expresión válida. Los tipos de datos de input_expression y cada when_expression deben ser iguales o una conversión implícita.
CUANDO Boolean_expression
Es la expresión booleana evaluada cuando se utiliza 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'
Ya hay muchas respuestas con respecto a CASE. Explicaré cuándo y cómo usarlo CASE.
Puede 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, las instrucciones 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 cae la pregunta del OP. 22978 OR 23218 OR 23219no obtendrá 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 cada when_expression deben ser iguales o una conversión implícita.
Expresiones CASE buscadas
CASEWHEN 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 AND / OR con en cada expresión booleana.
1.enunciado 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'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. Declaración de actualización 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'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
Votación a favor debido a la inclusión de un ELSE Salescampo, que devuelve el valor predeterminado si no se incluye en una declaración de caso, apropiado para consultas comerciales.
FoxDeploy
3
select id,phno,case gender
when'G'then'M'when'L'then'F'else'No gender'endas gender
from contacts
¿Por qué no explican lo que se está haciendo aquí? Es importante dar respuestas completas con explicaciones, ya que algunos novatos podrían necesitar eso para comprender cómo esto resuelve el 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 = El nombre de la tabla en la que desea realizar la operación.
column_name = El nombre de la columna / campo del valor que desea establecer.
update_value = El valor que desea establecer de column_name
Si bien este código puede resolver el problema del OP, algunas palabras de explicación serían aún más útiles para futuros lectores.
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
Respuestas:
Ese formato requiere que uses:
De lo contrario, use:
fuente
=
funcionaría si estuvieras comparando con un solo valor. Sin embargo,(22978, 23218, 23219)
es una matriz yIN
es necesaria para que coincida solo con uno de los valores.fuente
IN
palabra clave es mucho mejor manerafuente
Puede usar una de las expresiones que tiene WHEN, pero no puede mezclar ambas.
CUANDO cuando_expresión
Es una expresión simple con la que input_expression se compara cuando se usa el formato CASE simple. when_expression es cualquier expresión válida. Los tipos de datos de input_expression y cada when_expression deben ser iguales o una conversión implícita.
CUANDO Boolean_expression
Es la expresión booleana evaluada cuando se utiliza el formato CASE buscado. Boolean_expression es cualquier expresión booleana válida.
Podrías programar:
1)
2)
Pero en cualquier caso, puede esperar que la clasificación variable se compare en una expresión booleana.
Consulte CASO (Transact-SQL) (MSDN).
fuente
Ya hay muchas respuestas con respecto a
CASE
. Explicaré cuándo y cómo usarloCASE
.Puede 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, las instrucciones Insert, UPDATE y DELETE.
Una expresión CASE tiene los siguientes dos formatos:
Expresión CASE simple
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 cae la pregunta del OP.
22978 OR 23218 OR 23219
no obtendrá 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 cada when_expression deben ser iguales o una conversión implícita.Expresiones CASE buscadas
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 AND / OR con en cada expresión booleana.
1.enunciado SELECT con expresiones CASE
2. Declaración de actualización con expresión CASE
3. Cláusula ORDER BY con expresiones CASE
4.Con cláusula con expresión CASE
Espero que estos casos de uso ayuden a alguien en el futuro.
Fuente
fuente
Tratar
fuente
fuente
ELSE Sales
campo, que devuelve el valor predeterminado si no se incluye en una declaración de caso, apropiado para consultas comerciales.fuente
table_name
= El nombre de la tabla en la que desea realizar la operación.column_name
= El nombre de la columna / campo del valor que desea establecer.update_value
= El valor que desea establecer decolumn_name
fuente
fuente