SQL-按达到999时循环使用的数字排序

SQL-按达到999时循环使用的数字排序,sql,sql-server,Sql,Sql Server,我正试着按一个数字订购,当它达到999时,它就会循环使用。数字范围为1-999,且应始终按升序运行。当前,我的SQL(orderbyboxid ASC,Seqno ASC)正在生成以下结果: 框编号将始终每9个序号递增1。因此,在方框35897中显示的示例中,范围应运行999、1、2、3、4、5、6、7、8 没有时间戳可以用来查找顺序,因为序列号是以随机顺序插入数据库的。这是一种暗中操作,但可能 SELECT Box, Number FROM YourTable ORDER BY

我正试着按一个数字订购,当它达到999时,它就会循环使用。数字范围为1-999,且应始终按升序运行。当前,我的SQL(
orderbyboxid ASC,Seqno ASC
)正在生成以下结果:

框编号将始终每9个序号递增1。因此,在方框35897中显示的示例中,范围应运行999、1、2、3、4、5、6、7、8


没有时间戳可以用来查找顺序,因为序列号是以随机顺序插入数据库的。

这是一种暗中操作,但可能

SELECT Box,
       Number
FROM YourTable
ORDER BY Box,
         ROW_NUMBER() OVER (PARTITION BY Number ORDER BY Box ASC),
         Number;
但是,如果单个框的
Number
的值超过999,则此操作将不起作用


显示解决方案(由于DB Fiddle将结果集限制为10行,我不得不使用CTE来显示相关行)。

只有当框的序列号中同时包含1和999时,才会出现问题。表中每个框的行数从不超过九行。因此,检测该案例,并在较低的数字上添加1000

select *
from mytable
order by
  box, 
  case when min(number) over (partition by box) = 1
        and max(number) over (partition by box) = 999
        and number < 500
       then number + 1000
       else number
  end;
选择*
从mytable
订购人
盒子,
最小(数量)超过(按框划分)=1时的情况
(按框划分)上的最大(数)=999
数量<500
然后数字+1000
其他号码
结束;

演示:

再次查看-图像中的顺序与ORDERBY子句完全对应。声称有故障的999在方框35897中,而下一行是方框35898。如果你认为这是第一个,那是不可能的。你能分享一下这个数据的预期结果吗?这将使问题更加清晰。为了进一步展开,您需要某种“系列”指示器,用于确定给定的999值是系列“x”,它位于系列“y”之前。你表示你没有别的东西。这听起来像是对岛屿和缺口问题的一种奇怪的看法。您希望999与1之间没有间隔,并且希望从间隔后的最小数字开始。我认为这是可能的,但我认为这将不是非常有效或容易的。你必须想出代码,看到8和999之间的差距,但999和1之间没有差距(在这种情况下,999被视为零…998是负的,等等),我认为这将是非常困难的。好问题。下次请将数据显示为文本,而不是图像。这是一个很好的解决方法。999第一次出现,而1第二次出现,因此在1之前得到999。好主意。我似乎无法使此解决方案一致地给出预期结果,如果我按此顺序取下数字,则在框中第一次出现999和1时有效,但在第二次出现时无效,则在结果中第三次出现时有效,等等。单个框中的数字是否超过999?如前所述,如果是这样,这将不起作用。如果没有合适的样本数据,我不能给你一个答案,因为它显然适用于演示的数据。