risposta-alla-domanda-sullo-sviluppo-web-bd.com

SQL Server: CASE WHEN OR ALLORA FINE => il OR non è supportato

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 
532
Werner

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 
1016
OMG Ponies
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 
237
Darren
CASE WHEN ebv.db_no  IN (22978, 23218, 23219) THEN 'WECS 9500' 
  ELSE 'WECS 9520' 
END as wecs_system 
55
Cade Roux

Puoi usare una delle espressioni che WHEN ha, ma non puoi mescolarle entrambe.

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

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

48
Alfaplus

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:

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

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

Fonte

33
Somnath Muluk

Provare

CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
31
JNK
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;
26
Archu
select id,phno,case gender
when 'G' then 'M'
when 'L' then 'F'
else
'No gender'
end
as gender 
from contacts
2
Debendra Dash
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
2
Anand agrawal