如何根据同一行的另一列更新各种sql列?

时间:2019-02-09 06:38:33

标签: sql sql-server sql-update

我正在运行SQL Server,需要更新数百个条目。列A具有唯一的值,基于此,我需要更新同一表的列B,所有值均不同。本质上,我正在寻找一种执行以下操作的方法,但要以大量方式进行:

UPDATE table
set column B = 'value'
where column A = 'unique value'

5 个答案:

答案 0 :(得分:2)

这是您所期望的吗

UPDATE table
set column B = case when column A = 5 then 'unique string' end;

答案 1 :(得分:0)

怎么样:

update table set
columnB = concat('unique ', columnA)

根据您的需要,您可能需要也可能不需要where子句。

答案 2 :(得分:0)

有了数百个值,您最好在TT要求的单独表中定义{唯一值-更新值}映射。但是否则,如果可以在UPDATE语句中对这些映射进行硬编码,则可以:

UPDATE t
SET B = CASE A
        WHEN 'unique value1' THEN 'value1'
        WHEN 'unique value2' THEN 'value2'
        WHEN 'unique value3' THEN 'value3'
        ELSE 'Unknown'
    END
FROM table t

顺便说一句,以上仅适用于3个映射

答案 3 :(得分:0)

在这里,您需要编写游标以更新同一表中的列值

BEGIN 
DECLARE c_a, c_b TEXT;
DECLARE c_ab CURSOR FOR
SELECT column_a,column_b FROM c_table;
OPEN c_ab;
LOOP FETCH c_ab into c_ca, c_cb; IF c_ca = "0" THEN update c_table SET column_b = "No" WHERE column_a = c_ca; END IF; IF c_ca = "1" THEN update c_table SET column_b = "Yes" WHERE column_a = c_ca; END IF; END LOOP; CLOSE c_ab; END

正在工作并经过测试的代码[请参考一些游标教程以根据您的条件进行更新],并可以以此方式批量,快速地更新表

答案 4 :(得分:0)

感谢@Jim Macaulay。做到了。谢谢大家的投入。