这条语句怎么写?

jsjwlxh 2010-07-03 09:17:37
一直表table
表table 有字段sn,column1,column2

sn 表示流水号 标识字段 以1递增

我如何写语句知道这张表的记录是断了的!!

比如:
sn column1 column2

1 100 200
2 300 100
4 200 100
......
显然这个例子断了第三条记录!!!
如果记录很多
我怎么批量的知道哪些记录断了呢?

...全文
128 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsjwlxh 2010-07-04
  • 打赏
  • 举报
回复
sn并不一定是按照顺序 的,有可能是混乱的
出现
sn
4
2
1
6
8
10
15
9
obuntu 2010-07-04
  • 打赏
  • 举报
回复
也是个经典例子。。

inside T-SQL QUERY里讲得很清楚。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jsjwlxh 的回复:]

sn并不一定是按照顺序 的,有可能是混乱的
出现
sn
4
2
1
6
8
10
15
9
[/Quote]

加个排序就是了。
SQL77 2010-07-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jsjwlxh 的回复:]
sn并不一定是按照顺序 的,有可能是混乱的
出现
sn
4
2
1
6
8
10
15
9
[/Quote]
参考3楼,楼主没试?
jsjwlxh 2010-07-04
  • 打赏
  • 举报
回复
试过
好像没有得到想要的结果啊
SQL77 2010-07-03
  • 打赏
  • 举报
回复
还可以

SELECT *,(SELECT COUNT(1) FROM TB WHERE SN<=T.SN)RN FROM TB T

WHERE SN<>(SELECT COUNT(1) FROM TB WHERE SN<=T.SN)
SQL77 2010-07-03
  • 打赏
  • 举报
回复
DECLARE @RN INT 
SET @RN =(SELECT COUNT(1) FROM TB)

SELECT ID=IDENTITY(INT,1,1) INTO #T FROM SYSCOLUMNS A,SYSCOLUMNS B

SELECT * FROM TB WHERE SN NOT IN(SELECT ID FROM #T WHERE ID<=@RN)
feixianxxx 2010-07-03
  • 打赏
  • 举报
回复

IF OBJECT_ID('dbo.T1') IS NOT NULL
DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1
(
keycol INT NOT NULL PRIMARY KEY CHECK(keycol > 0),
datacol VARCHAR(10) NOT NULL
);
INSERT INTO dbo.T1(keycol, datacol) VALUES(3, 'a');
INSERT INTO dbo.T1(keycol, datacol) VALUES(4, 'b');
INSERT INTO dbo.T1(keycol, datacol) VALUES(6, 'c');
INSERT INTO dbo.T1(keycol, datacol) VALUES(7, 'd');


--方法1:case when ....end
select
case when not exists(select * from T1 where keycol=1) then 1
else (select MIN(keycol) from T1 a where not exists(select * from T1 where keycol=a.keycol+1))+1 end
--方法2;COALESCE(a,b)函数--具体翻MSDN吧
select coalesce(MIN(keycol+1),1)
from T1 a
where not exists(select * from T1 where keycol=a.keycol+1)
and exists(select * from T1 where keycol=1)--这个EXISTS如果为NULL where 条件为假,那么MIN(KEYCOL+1)得到一个NULL,那么函数取第二个参数1
--方法3:临时表(这里的临时表产生方法我在后面会说,当然我之前第一次的学习笔记也有,有兴趣的可以去翻翻)
select top 1 N
from T1 right join NUM on T1.keycol=NUM.N--这里的NUN表是一个从1-1000000的表
where N<=(select MAX(keycol) from T1 ) and keycol is null
--方法4:表之间的OUTER JOIN
SELECT case when not exists(select * from T1 where keycol=1) then 1
else (select MIN(A.keycol + 1)
FROM dbo.T1 AS A
LEFT OUTER JOIN dbo.T1 AS B
ON B.keycol = A.keycol + 1
WHERE B.keycol IS NULL)end
/*
N
-----------
1
*/


这个是找出最小缺失记录号的几个方法
你的问题雷同 ~

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧