我有一个名为acc1152的表,字段为accno。取决于该字段的值,我需要用新值替换它。这些是我需要更新的值
old value new value
7007 4007
7008 4008
4008 7
7009 4009
7011 4011
4011 ' '
7010 4010
4010 1
7016 4016
4016 1
4506 4006
4512 4012
如果记录在其accno字段中具有上述旧值,则该accno需要替换为新值
如何编写一个可以完成此任务的查询?
答案 0 :(得分:5)
您可以在更新语句中使用case
语句,如下所示:
update acc1152
set [columnName] =
case [columnName]
when '7007' then '4007'
when '7008' then '4008'
-- etc
when '4512' then '4012'
else
[columnName] end
或者更好的方法(IMO)是使用临时/变量表来跟踪旧/新映射
declare @someTable table (oldValue varchar(50), newValue varchar(50))
insert into @someTable (oldValue, newValue)
select '7007','4007'
union all select '7008','4008'
-- etc
union all select '4512','4012'
update acc1152
set [columnName] = st.newValue
from acc1152 a
inner join @someTable st on a.[columnName] = st.oldValue
答案 1 :(得分:2)
以下内容适用于任何数据库(它是ANSI标准SQL):
update acc1152 t
set accno = (select r.newvalue from replacements r where r.oldvalue = t. acc1152)
where exists (select 1 from replacements where r.oldvalue = t. acc1152);
根据数据库的不同,还有其他方法。
这假设您的替换值在表格中,我称之为replacements
。