SQL-按达到999时循环使用的数字排序
我正试着按一个数字订购,当它达到999时,它就会循环使用。数字范围为1-999,且应始终按升序运行。当前,我的SQL(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
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?如前所述,如果是这样,这将不起作用。如果没有合适的样本数据,我不能给你一个答案,因为它显然适用于演示的数据。