根据不同表中的另一个列值更新表中的两个列值

时间:2014-10-23 20:26:32

标签: sql-server

我有tbl1包含m_code字段,我需要使用某些值更新tbl2中的p_code和e_code字段。例如,如果m_code = S,那么我想将P_code设置为1,将e_code设置为10.我已经写了一个select语句来说明我想如何根据tbl1中的不同值代码显示字段值。 我需要帮助编写查询..

select 
    case 
    when e.m_code = 'S' then s.P_CODE = 1 and s.E_CODE = 10
    when e.m_code = 'H' then s.P_CODE = 2 and s.E_CODE =5
    when e.m_code = 'E' then s.P_CODE = 3 and s.E_CODE =6
    when e.m_code = 'P' then s.P_CODE = 8 and s.E_CODE = 2
    when e.m_code ='R' then s.P_CODE = 3 and s.E_CODE =1 
    end
    from
    tbl1 e
       join tbl2 s on e.field = s.field
   where s.m_code in ('S','H','E', 'P', 'R')

2 个答案:

答案 0 :(得分:3)

Update s 
  SET s.P_CODE = CASE  
                    when e.m_code = 'S' then 1 
                    when e.m_code = 'H' then 2 
                    when e.m_code = 'E' then 3 
                    when e.m_code = 'P' then 8 
                    when e.m_code = 'R' then 3 
                 END

     ,s.E_CODE = CASE  
                    when e.m_code = 'S' then 10
                    when e.m_code = 'H' then 5 
                    when e.m_code = 'E' then 6 
                    when e.m_code = 'P' then 2 
                    when e.m_code = 'R' then 1 
                 END
from tbl1 e join tbl2 s 
on e.field = s.field
where s.m_code in ('S','H','E', 'P', 'R')

答案 1 :(得分:0)

update s
set p_code = x.p
, e_code = x.e
from tbl2 s
inner join tbl1 e 
    on e.field = s.field
inner join
    (
        select 'S' x, 1 p, 10 e
        union select 'H', 2, 5
        union select 'E', 3, 6
        union select 'P', 8, 2
        union select 'R', 3, 1
    ) x
    on x.x = e.m_code
where s.m_code in ('S','H','E', 'P', 'R')

SQL小提琴:http://sqlfiddle.com/#!6/c5357/3