2009-08-06 10 views
11

muszę ustawić kwerendę jak poniżej:Korzystanie IF..ELSE w aktualizacji (serwer SQL 2005 i/lub 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' 

i tak dalej i tak dalej ...

I jestem w stanie to zrobić za pomocą wielu zapytań, ale zastanawiałem się, czy mogę to zrobić tylko w jednym oświadczeniu.

Odpowiedz

31

to powinno działać

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 

pytanie jest dlaczego chcesz to zrobić ... może warto przemyśleć model danych. możesz zastąpić null tym, co chcesz.

+0

Dzięki. To powinno być oznaczone jako poprawna odpowiedź. – GaussZ

+1

Istnieją 2 dodatkowe "zestaw" jak próbowałem w SQL 2008. Dzięki za odpowiedź – stoto

4

Tak można użyć CASE

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