基于两个其他字段中的值更新字段

时间:2009-10-14 18:18:08

标签: sql sql-server sql-server-2005 tsql stored-procedures

我有一个包含RACE,ETHNICITY和ETH字段的数据库表。我需要评估RACE和ETHNICITY字段并使用一系列案例填充ETH: 如果Race = W且Ethncity = 1则ETH =高加索人等。

有人可以告诉我构建存储过程的最佳方法来完成此任务吗?

2 个答案:

答案 0 :(得分:9)

我在你的更新中做了一个CASE声明:

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

在这种情况下,您可以在case语句中的每一行中拥有所需的条件。在某些行中,您可以执行两个条件(如前两行),而在其他行中,您可以执行一个(如第三行所示)。

答案 1 :(得分:1)

规范化您的数据,创建一个新表,在Race + Ethnicity上使用复合主键:

YourNewTable

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

为您的另一个表创建一个外键,然后加入以显示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