2009-08-06 6 views
11

ho bisogno di impostare una query come di seguito:Utilizzando if..else in UPDATE (SQL Server 2005 e/o Access 2007)

UPDATE XXXXXX 
IF column A = 1 then set column B = 'Y' 
ELSE IF column A = 2 then set column C = 'Y' 
ELSE IF column A = 3 then set column D = 'Y' 

e così via e così via ...

I Sono in grado di farlo usando più query, ma mi chiedevo se potessi farlo in una sola istruzione.

risposta

31

questo dovrebbe funzionare

update table_name 
    set column_b = case 
        when column_a = 1 then 'Y' 
        else null 
       end, 
    set column_c = case 
        when column_a = 2 then 'Y' 
        else null 
       end, 
    set column_d = case 
        when column_a = 3 then 'Y' 
        else null 
       end 
where 
conditions 

la domanda è: perché si vuole fare che ... si potrebbe voler ripensare il modello di dati. puoi sostituire null con quello che vuoi.

+0

Grazie. Questo dovrebbe essere contrassegnato come la risposta corretta. – GaussZ

+1

Ci sono 2 "set" extra come ho provato in SQL 2008. Grazie per la risposta – stoto

4

Sì, è possibile utilizzare CASE

UPDATE table 
SET columnB = CASE fieldA 
     WHEN columnA=1 THEN 'x' 
     WHEN columnA=2 THEN 'y' 
     ELSE 'z' 
     END 
WHERE columnC = 1