我们假设我有一张这样的表
END
id rank degree
1 4 3
2 3 3
**rank 4 has 4 degrees.
**rank 3 has 4 degrees.
我们假设每个等级都有一定数量的度数。我会假设等级3有4度。
我想要的是,当我增加当前等级的最大度数时,等级增加1并且度数重置为1.例如,我想增加id中的id 2结果,等级应为4,程度应为1.
如何在SQL Server 2008中有效地进行更新?
答案 0 :(得分:3)
我假设您要更新具有id=3
的那个等级的所有行。
UPDATE t SET t.rank = t.rank + 1, t.degree = 1
FROM tableName t
WHERE rank = (SELECT rank FROM tableName t2 WHERE id=@id)
答案 1 :(得分:2)
这是你想要的吗?
update t
set degree = (case when degree = 5 then 1 else degree + 1 end),
rank = (case when degree = 5 then rank + 1 else rank end)
where id = 3;
答案 2 :(得分:1)
如果有一个参考表包含有关每个支持等级的最大程度的信息(让我们称之为dbo.ranks
),如下所示:
rank maxdegree
---- ---------
1 3
2 4
3 5
4 4
... ...
其中假设maxdegree
是一个大于0的整数,那么这就是你如何使用它:
UPDATE t
SET
t.rank += t.degree / r.maxdegree,
t.degree += t.degree % r.maxdegree + 1
FROM dbo.atable AS t
INNER JOIN dbo.ranks AS r
ON t.rank = r.rank
;
其中dbo.atable
被假定为要更新的表的名称。
请注意,此查询仅用于增加1.如果您希望它能够将degree
增加任意数字,则需要进行更多实质性更改,而不仅仅是替换1
在+ 1
位。
此外,对于表中的某些无效数据(例如,大于相应的最大值),此查询将无法正常工作,因此请确保在尝试使用此数据之前删除了数据中的任何异常。