以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 求救如何用sql找出一段连续的流水号之间缺失的号码 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=140009) |
-- 作者:chen37280600 -- 发布时间:2019/8/27 15:37:00 -- 求救如何用sql找出一段连续的流水号之间缺失的号码 一段连续的流水号,比如1~10,查询中间缺失的号码,比如,4、7、8、9。 或者更复杂一点,查询每个ID下的缺失流水号,比如ID为1,从1~10中间缺失的流水号,ID为2,从5~13的流水号。 百度只找到Oracle的解决方法,我是mssql,不知道怎么解决,求版主搭救,给一段sql代码
[此贴子已经被作者于2019/8/27 15:37:39编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/8/27 17:33:00 -- 只能处理2048以内的流水号 with cte as ( select ID,流水号 from 表A ), CTE1 AS (
select distinct number,a.id from master..spt_values as m cross join cte as a
where type=\'p\' and number<(select MAX(b.流水号) from cte as b where b.id = a.id)
and number>=(select MIN(k.流水号) from cte as k where k.id = a.id) ) SELECT c.id,number+1 AS 流水号 FROM CTE1 as c LEFT JOIN CTE as d ON c.number=d.流水号-1 and c.id=d.id WHERE d.流水号 IS NULL order by c.id,流水号 如果要处理大于2048的流水号,需要自己创建一个完整的流水号表做辅助
[此贴子已经被作者于2019/8/27 17:33:00编辑过]
|
-- 作者:chen37280600 -- 发布时间:2019/8/28 8:30:00 -- 妥!解决了,谢谢! |
-- 作者:xndd -- 发布时间:2019/8/28 8:38:00 -- 另外有2个方法可以参考: 1 用excel,建一个数字列,从1拖动到x,x为sql查询出来的行数 2 把sql查询出来的列放入第二个列,然后条件比对,颜色标识 适合不懂程序编码的人使用 第二个方法,从系统获取需要判断的列,用程序循环比对
|