SQL 取出某个表序列号中不连续的数字

SQL 取出某个表序列号中不连续的数字

SQL来源 :https://bbs.csdn.net/topics/390998839

WITH table1(A) as (SELECT cast( xx as integer) FROM [dbo].[xxxxx] where xx like'010209%')
,t AS (
    SELECT A,
           ROW_NUMBER() OVER(ORDER BY A) rn
      FROM table1
)
,r AS ( -- 求出缺少的起始数和个数
    SELECT t1.A + 1 s,
           t2.A - t1.A - 1 n
      FROM t t1
      JOIN t t2
        ON t2.rn = t1.rn + 1
       AND t2.A > t1.A + 1
)
SELECT r.s + n.number A
  FROM r
  JOIN (SELECT *
          FROM master..spt_values
         WHERE type='P'
       ) n
    ON n.number < r.n

SQL语句中使用到了RowNumber()
Row_Number() over ([<partition_by_clause>] <order_by_clause>)
其中
Row_Number() 起到了编号的作用
partition_by 使相同的数据进行分组
order_by 使数据按照一定的顺序排列

还用到了 master…spt_values

这个在网上查询是属于SqlServer2008R2以上的数字辅助表,主要由

namenumbertypelowhighstatus

这几个字段组成
在本次代码中选择type=p
这样对应的number属于0-2047
故以上SQL语句限制number为2047 超过该范围则无法显示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值