Il OR
nella clausola WHEN
di un'istruzione CASE
non è supportato. Come posso fare questo?
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Questo formato richiede l'utilizzo di entrambi:
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
Altrimenti, usa:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
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
Puoi usare una delle espressioni che WHEN ha, ma non puoi mescolarle entrambe.
QUANDO when_expression
È un'espressione semplice a cui input_expression viene confrontato quando viene utilizzato il semplice formato CASE. when_expression è qualsiasi espressione valida. I tipi di dati di input_expression e ogni when_expression devono essere uguali o devono essere una conversione implicita.
WHEN Boolean_expression
L'espressione booleana viene valutata quando si utilizza il formato CASE cercato. Boolean_expression è qualsiasi espressione booleana valida.
Potresti programmare:
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
Ma in ogni caso ci si può aspettare che il ranking variabile venga confrontato in un'espressione booleana.
VediCASE (Transact-SQL)(MSDN).
Ci sono già molte risposte riguardo a CASE
. Spiegherò quando e come usare CASE
.
Puoi utilizzare le espressioni CASE ovunque nelle query SQL. Le espressioni CASE possono essere utilizzate all'interno dell'istruzione SELECT, delle clausole WHERE, della clausola Order by, delle clausole HAVING, delle istruzioni Insert, UPDATE e DELETE.
Un'espressione CASE ha i seguenti due formati:
Semplice espressione CASE
CASE expression
WHEN expression1 THEN Result1
WHEN expression2 THEN Result2
ELSE ResultN
END
Questo confronta un'espressione con un insieme di espressioni semplici per trovare il risultato. Questa espressione confronta un'espressione con l'espressione in ogni clausola WHEN per l'equivalenza. Se l'espressione all'interno della clausola WHEN è abbinata, verrà restituita l'espressione nella clausola THEN.
È qui che sta cadendo la domanda dell'OP. 22978 OR 23218 OR 23219
non otterrà un valore uguale all'espressione i.e. ebv.db_no. Ecco perché sta dando un errore. I tipi di dati di input_expression e ogni when_expression devono essere uguali o devono essere una conversione implicita.
Espressioni CASE ricercate
CASE
WHEN Boolean_expression1 THEN Result1
WHEN Boolean_expression2 THEN Result2
ELSE ResultN
END
Questa espressione valuta un insieme di espressioni booleane per trovare il risultato. Questa espressione consente agli operatori di confronto e agli operatori logici AND/OR di ciascuna espressione booleana.
1. Istruzione SELEZIONA con espressioni 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.Aggiornare la dichiarazione con l'espressione 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
3.ORDER BY clausola con espressioni 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. Clausola in sospeso con espressione 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)
Spero che questi casi d'uso possano aiutare qualcuno in futuro.
Provare
CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
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 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