sql 查询不在表里的值

例如,表里有一列数据1,2,5,6,9,12,13,14,15,20,44,100。

需要查询没在这一列中的数如3~4,7~8,10~11,16~19,21~43,45~99。

1,使用子查询

2,用排序函数

WITH C1 AS
(
	SELECT ROW_NUMBER() OVER(ORDER BY CardNo) AS rowNum,  CardNumber FROM Table 1
)
,
C2 AS
(
	SELECT CardNumber, (CardNumber - rowNum) AS grp FROM C1
	UNION ALL 
	SELECT 0, 0
	UNION ALL
	SELECT @allowCount, @allowCount - (ISNULL(MAX(rowNum), 0) + 1) FROM C1 
)
SELECT Max(CardNumber) + 1 AS cn FROM C2
GROUP BY grp
ORDER BY cn


 查询结果:

3,8,25,45,89,97,10000

SELECT * FROM C1

得到

rownum   CardNum

1    1
2    2
3    5
4    6
5    7
6    24
7    44
8    88
9    96
10  9999

 

 另外,用到的小技巧

1,在字符串左端补“0”, 用RIGHT函数。里RIGHT('000000' + CAST((Max(CardNumber) + 1)结果“98”变为“000098”

2,把“000098”转换为int 98:CAST(“000098” AS INT)。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值