2009-10-14 5 views
2

J'ai une table de base de données contenant les champs RACE, ETHNICITY et ETH. Je dois évaluer les champs RACE et ETHNICITY et remplir ETH en utilisant une série de cas: si Race = W et Ethncity = 1 puis ETH = Caucasian etc.Mise à jour d'un champ basé sur des valeurs dans deux autres champs

Quelqu'un peut-il me conseiller sur la meilleure façon de structurer une procédure stockée pour: accomplir ceci?

Répondre

9

Je ferais une déclaration de cas dans votre mise à jour:

UPDATE yourtable 
    SET Eth = CASE 
       WHEN Race = 'W' AND Ethnicity = 1 THEN 'Caucasian' 
       WHEN Race = 'B' AND Ethnicity = 2 THEN 'African-American' 
       WHEN Race = 'H' THEN 'Hispanic' --Ethnicity is irrelevant 
       ...whatever other pairs of conditions you want... 
      END 
FROM yourtable 

Dans ce cas, vous pouvez avoir toutes les conditions que vous voulez sur chaque ligne dans votre déclaration de cas. Dans certaines lignes, vous pouvez faire deux conditions (comme dans les deux premières lignes), et dans d'autres, vous pouvez en faire une (comme dans la troisième ligne).

+0

Cela a fait l'affaire. Merci!! – SidC

1

Normaliser vos données, créez une nouvelle table, avec une clé primaire composite sur la race + Origine ethnique:

YourNewTable

Race  CHAR(1)  PK 
Ethnicity CHAR(1)  PK 
ETH  VARCHAR(50) 

faire une clé étrangère à votre autre table, et se rejoignent pour montrer ETH:

SELECT 
    o.Race 
     ,o.ETHNICITY 
     ,n.ETH 
    FROM YourTable    o 
     INNER JOIN YourNewTable n ON o.Race=n.Race AND o.Ethnicity=n.Ethnicity 
+0

+1, utilisez la table plutôt qu'une série d'instructions de cas. – Yishai

Questions connexes