テーブルが1つあります。
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である更新番号列
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
何か案が?返信ありがとうございます。