如何在SQL中同时交换两个字段的值?

时间:2013-10-03 22:49:13

标签: sql sql-server

我将数据放在一列中。 例如:

狗 狗 猫 狐狸

如何同时将所有狗的价值改为狐狸和所有狐狸的价值?如果我运行更新设置,它会将所有狗改为狐狸,然后我运行第二个它将所有狗变成狗。

3 个答案:

答案 0 :(得分:5)

update
    table
set
    animal = case anmial when 'dog' then 'fox' else 'dog' end
where
    animal in ('dog', 'fox')

答案 1 :(得分:2)

如果你不仅仅是狗和狐狸,你可以考虑制作一个转换表来帮助你进行更新。这样你就不需要案例陈述了。

declare @original table
( 
  pk int identity(1,1),
  column1 varchar(max) 
)

insert into @original 
select 'fox' 
union all 
select 'dog'

declare @conversion table 
( 
  valueFrom varchar(max)
 ,valueTo varchar(max) 
)

insert into @conversion 
select 'fox','dog' 
union all 
select 'dog','fox'

select * from @original

update original
set original.column1 = c.valueTo
from @original as original inner join @conversion as c
on original.column1 = c.valueFrom

select * from @original

答案 2 :(得分:0)

使用已经回答的案例陈述是“正确的方法”。但是,你可能有点创意。假设从未使用'xxx'......

update table set animal = 'xxx' where animal = 'dog'
update table set animal = 'dog' where animal = 'cat'
update table set animal = 'cat' where animal = 'xxx'

有一种方法可以给猫皮肤。