我有一张桌子。
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
有什么想法吗? 谢谢你的回复。
答案 0 :(得分:0)
一次设置全部或者也检查CID是否为NULL