按顺序更新列

时间:2014-10-02 14:24:54

标签: sql

我正忙着编写一段SQL,如果第1列的结果符合某些条件,我只想更新第2列。

在下面的例子中,我正在寻找一种语法,它允许我在继续下一个之前执行一次更新,所以我可以使用第二次中第一次的结果。

CREATE TABLE #Rows 
(
RowID INT IDENTITY
,Num1 INT 
,Num2 INT 
)

INSERT INTO #Rows
(
Num1,Num2)
VALUES
(1,10),
(1,10)

SELECT
    *
FROM
    #Rows

UPDATE
    #Rows
SET 
    Num1 = CASE WHEN Num1 + Num2 < 20 THEN 10 --Update 1 : I want this statement to execute first 
           END
   ,Num2 = CASE WHEN Num1 + Num2 = 20 THEN 100 ELSE 700 --Update 2 : I want this statement to execute after Update 1  
           END  
SELECT
    *
FROM
    #Rows

DROP TABLE #Rows

我得到的结果如下:

RowID   Num1    Num2
1       10      700
2       10      700

我希望得到以下结果:

RowID   Num1    Num2
1       10      700
2       10      100

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

由于Num1设置为表达式的结果,您可以在第二个CASE语句中重用该表达式:

UPDATE
    #Rows
SET 
    Num1 = CASE 
               WHEN Num1 + Num2 < 20 THEN 10
           END,
   Num2 = CASE 
               WHEN CASE
                        WHEN Num1 + Num2 < 20 THEN 10 
                        ELSE Num1
                    END + Num2 = 20 THEN 100 
                    ELSE 700 --Update 2 : I want this statement to execute after Update 1  
           END  

是的它很乱,但它应该有用。

我认为另一种方法是将整个事物包装在事务中并进行两次更新

答案 1 :(得分:0)

我认为你不能这样做,你将需要两个更新语句或更改CASE条件。据我所知,SQL语法不是为此而设计的。

在此处阅读更多信息:

http://dev.mysql.com/doc/refman/5.0/es/update.html

http://www.postgresql.org/docs/9.1/static/sql-update.html