sql根据每行中的值更新许多行

soo*_*ise 0 sql sql-server-2008-r2

我有一个非常低效的sql脚本,它采用下表,并使用游标填充val2.我希望能够通过单次更新更新所有val2值,但是每行使用val1计算val2.

val1: 1, val2 0
val1: 2, val2 0 
val1: 3, val2 0
val1: 4, val2 0
val1: 5, val2 0
Run Code Online (Sandbox Code Playgroud)

所以我想,你会有这样的事情:

UPDATE Table SET val2 = (some code based on val1 for each row)
Run Code Online (Sandbox Code Playgroud)

我怎么能把它写成一行sql?

Eri*_*ric 5

update table set val2 = val1 + 1
Run Code Online (Sandbox Code Playgroud)

像那样工作!如果您希望通过case语句应用某些代码集:

update table set
    val2 = 
        case 
            when val1 = 1 then 'One'
            when val1 = 2 then 'Two'
            when val1 = 3 then 'Three'
            else 'Something something'
        end
Run Code Online (Sandbox Code Playgroud)