L' OR
operatore nella WHEN
clausola di CASE
un'istruzione 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
L' OR
operatore nella WHEN
clausola di CASE
un'istruzione 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
Risposte:
Tale formato richiede l'utilizzo di:
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, utilizzare:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
=
funzionerebbe se si stesse confrontando con un singolo valore. Tuttavia, (22978, 23218, 23219)
è un array ed IN
è necessario per abbinare solo uno dei valori.
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
parola chiave è un modo molto migliore
Puoi usare una delle espressioni che ha QUANDO, ma non puoi mescolarle entrambe.
QUANDO quando_espressione
Espressione semplice con cui viene confrontato input_expression quando viene utilizzato il formato CASE semplice. when_expression è qualsiasi espressione valida. I tipi di dati di input_expression e ciascuno di when_expression devono essere uguali o devono essere una conversione implicita.
QUANDO Boolean_expression
L'espressione booleana viene valutata quando si utilizza il formato CASE cercato. Boolean_expression è qualsiasi espressione booleana valida.
Puoi 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 puoi aspettarti che la classifica variabile verrà confrontata in un'espressione booleana.
Vedi CASE (Transact-SQL) (MSDN).
Ci sono già molte risposte riguardo a CASE
. Spiegherò quando e come utilizzare CASE
.
È possibile utilizzare espressioni CASE ovunque nelle query SQL. Le espressioni CASE possono essere utilizzate nelle istruzioni SELECT, clausole WHERE, clausole Order by, clausole HAVING, Insert, UPDATE e DELETE.
Un'espressione CASE ha i seguenti due formati:
Espressione CASE semplice
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 ciascuna clausola WHEN per equivalenza. Se l'espressione all'interno della clausola WHEN viene abbinata, verrà restituita l'espressione nella clausola THEN.
È qui che sta cadendo la domanda del PO. 22978 OR 23218 OR 23219
non otterrà un valore uguale all'espressione ie ebv.db_no. Ecco perché sta dando un errore. I tipi di dati di input_expression e ciascuno di when_expression devono essere uguali o devono essere una conversione implicita.
Espressioni CASE cercate
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 operatori di confronto e operatori logici AND / OR con in ogni espressione booleana.
Dichiarazione 1.SELECT 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. Istruzione aggiornata con 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. ClausolaORDER BY 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.Having Clause 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.
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, che restituisce il valore predefinito se non incluso in un'istruzione case, appropriato per le query aziendali.
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
= Il nome della tabella su cui si desidera eseguire l'operazione.
column_name
= Il nome della colonna / campo di cui si desidera impostare il valore.
update_value
= Il valore che si desidera impostare 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