如何在单个命令中更新数据库列值(无CASE / SWITCH)?

时间:2016-05-25 03:45:02

标签: sql database

假设我们有一个表名Swap-Table。

    *Input Table*

    ID  NAME    Type
    ------------------ 
    1   name1    a
    2   name2    b
    3   name3    b  

我想编写一个命令来更新表。输出表将是

   **Output Table**

    ID  NAME    Type
    ------------------ 
    1   name1    b
    2   name2    a
    3   name3    a

条件:无案例/开关

2 个答案:

答案 0 :(得分:5)

您可以使用CTE或某种子查询来生成更新字典

WITH upd_dict (type_from, type_to) AS (
  SELECT 'a', 'b'
  UNION 
  SELECT 'b', 'a')
UPDATE table_name
   SET type = ud.type_to
  FROM upd_dict ud
 WHERE ud.type_from = type

但如果你问,CASE在这里看起来更具可读性和可理解性。

答案 1 :(得分:1)

我只提供这种转换的“可爱”方式,而不是我在生产代码中允许(甚至推荐)的任何内容:

declare @t table (ID int not null,Name varchar(17) not null,Type varchar(3) not null)
insert into @t(ID,NAME,Type) values
(1,'name1','a'),
(2,'name2','b'),
(3,'name3','b')
update @t set Type = CHAR(195-ASCII(Type))

select * from @t

产地:

ID          Name              Type
----------- ----------------- ----
1           name1             b
2           name2             a
3           name3             a

(不同的数据库产品可能有不同的方式来转换/转换为ascii代码和表变量)