使用条件更新值

时间:2014-01-08 14:07:31

标签: sql sql-server database sql-server-2008

我们假设我有一张这样的表

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中有效地进行更新?

3 个答案:

答案 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位。

此外,对于表中的某些无效数据(例如,大于相应的最大值),此查询将无法正常工作,因此请确保在尝试使用此数据之前删除了数据中的任何异常。