更新多行获取最大值

时间:2012-09-09 12:14:20

标签: sql sql-server-2008

我有一张桌子。

ID       SID     CID      Number
----------------------------------
1237      1       5        NULL
1236      1       5        NULL
1235      1       NULL      2
1234      1       NULL      2
1233      1       NULL      1
1232      1       NULL      1

我想获得最大数值。并更新Number列为NULL

DECLARE @Number INT;
SELECT @Number =  max([Number]) FROM STACKOVERFLOW WHERE [Number] IS NOT NULL AND SID = 1
SELECT @Number 

此SQL语句将返回2.

正如我所说,我想更新null的数字列,但它应该是"maximum value of number column" + 1,也就是说在我的情况下它应该是3。

DECLARE SID INT = 1;

UPDATE STACKOVERFLOW 
SET
Number = (
          SELECT TOP 1 CASE 
          WHEN Number IS NULL THEN 1 ELSE @Number + 1 END 
          FROM STACKOVERFLOW 
          WHERE SID = @SID AND Number IS NULL
         )
FROM STACKOVERFLOW WHERE ID = 1237 

表格如下:

ID       SID     CID      Number
----------------------------------
1237      1       5         3
1236      1       5        NULL
1235      1       NULL      2
1234      1       NULL      2
1233      1       NULL      1
1232      1       NULL      1

之后,再次sql语句适用于ID = 1236,那时@Number将返回3和 记录如下。

ID       SID     CID      Number
----------------------------------
.
1236      1       5        4
.
.

但我想要的结果是

ID       SID     CID      Number
----------------------------------
.
1236      1       5      3
.

在操作结束时,表格应该像

ID       SID     CID      Number
----------------------------------
1237      1       5         3
1236      1       5         3
1235      1       NULL      2
1234      1       NULL      2
1233      1       NULL      1
1232      1       NULL      1
1231      2       5         5
1230      2       5         5
1229      2       NULL      4
1228      2       NULL      4

有什么想法吗? 谢谢你的回复。

1 个答案:

答案 0 :(得分:0)

一次设置全部或者也检查CID是否为NULL