我正在尝试使用下一个数字更新表格中的列。
以下是一个例子:
表1
User1 100
User2 101
User3 102
User4 NULL
User5 NULL
User6 NULL
我需要它去
User1 100
User2 101
User3 102
User4 103
User5 104
User6 105
我尝试了几件事:
update Table1
set EmpID = MAX(empid)+1
where UserName = null
但这只会将所有空值设置为103。
答案 0 :(得分:3)
如果你的数据库支持row_number()
,你可以将null EmpId更新为row_number() + max(EmpId)
update t1
set t1.EmpId = t2.rn
from Table1 t1
join (select UserName,
row_number() over(partition by EmpId order by UserName)
+ (select max(EmpId) from Table1) rn
from Table1
where EmpId is null) t2
on t1.UserName = t2.UserName
where t1.EmpId is null;
答案 1 :(得分:3)
这就是我用Postgres做的事情:
with numbered_users as (
select username,
empid,
(select max(empid) from table1) as max_id,
row_number() over (order by username) as rn
from table1
where empid is null
)
update table1
set empid = nu.max_id + nu.rn
from numbered_users nu
where nu.username = table1.username
and table1.empid is null
;
答案 2 :(得分:3)
如果使用 MS SQL Server ,那么您可以做的一个技巧是可以更新行并在同一个go中设置变量,然后重用更新的变量。
为了说明,请考虑以下事项:
DECLARE @NextID INT
SET @NextID = 102
UPDATE Table1
SET @NextID = EmpID = @NextID + 1
WHERE EmpID IS NULL
这会将初始值设置为@NextId。你可以填充它如何适合你的逻辑 然后它运行Update over Table1并将@NextId + 1分配给EmpID,对于第一行更新,在此示例中给出103。 然后@NextId将更新为刚刚用于分配给EmpId的值 - 再次103。 等等,所以后续行将获得104然后是105,依此类推。
这种一次性更新变量和行值的方法非常有用,只要对您的特定问题稍作修改,它就应该适用。
答案 3 :(得分:0)
您可以使用此
UPDATE [Table1] SET [EmpID ] = [EmpID] +1 WHERE [UserName] = N'User1'
答案 4 :(得分:-1)
你可以尝试这个,但我怀疑它会起作用。
UPDATE Table1 SET
EmpID = (SELECT MAX(EmpID) FROM Table1)+1
WHERE EmpID IS NULL
您真的需要告诉我们更多有关您的要求的信息。请参阅上面的评论。