2009-08-06 5 views
11

Dois-je définir une requête comme ci-dessous:L'utilisation if..else UPDATE (serveur SQL 2005 et/ou 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' 

et ainsi de suite et ainsi de suite ...

I Je suis capable de le faire en utilisant plusieurs requêtes mais je me demandais, si je peux le faire en seulement 1 déclaration à la place.

Répondre

31

cela devrait fonctionner

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 question est pourquoi voudriez-vous faire cela ... vous voudrez peut-être repenser le modèle de données. vous pouvez remplacer null par ce que vous voulez.

+0

Merci. Cela devrait être marqué comme la bonne réponse. – GaussZ

+1

Il y a 2 "set" supplémentaires comme j'ai essayé dans SQL 2008. Merci pour la réponse – stoto

4

Oui, vous pouvez utiliser CASE

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