我有一张桌子。
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
我想获得最大数值。并更新为 NULL 的 Number 列
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
任何想法?感谢您的回复。