when w3schools stored hacer ejemplos cómo sql sql-server tsql case case-when

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.

  1. 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.

  2. 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:

  1. 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.

  2. 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.

Source


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