sql server 2008 -在TSQL中修改队列序列



在SQL Server 2008中,我有一个表"Q"的人在FIFO队列:

Person     Position
  23          1
  49          5
  108         2
  .           .
  .           .

当然,我可以使用

来查看队列
  SELECT * FROM Q ORDER BY Position

我需要能够在队列中上下移动人们。我知道我可以在一个存储过程中使用RBAR来完成它,但是如果可能的话,我希望能够在单个查询中完成它。要求是

   move person 'x' to position y

。将"x"移到y位置的人前面,并将该人和所有人移到后面一个

算法为:

  1. 查找'x'的位置#
  2. 对于每个位置>= 'y'的人('x'除外)增加一个
  3. 设置'x'的位置为y。

有这样的查询吗?

您有几个选择:

  • 链表(Id, PrevId),但Position现在是每次操作需要计算或重新计算的东西
  • 双链表(Id, PrevId, NextId);同上
  • position作为float,当插入发生时,新的position计算为前一个位置和下一个位置的平均值;但最终你会耗尽精度,所以你必须通过更均匀地重新分配值来维持它
现在,回到你的问题。你有一个问题吗?不可能。

最新更新