当前位置:首页 » 编程语言 » 断号sql查询
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

断号sql查询

发布时间: 2022-11-21 05:46:29

Ⅰ 怎样在一个表里查找连续编号字段的断号

这种方式的查询 比较麻烦
建议你 删除的时候 使用标识符 flag= 0,1进行标记。

sql中查询一个表,ID为自增,当中间出现断号则显示出断的ID号后面的列显示空或特定字符

select isnull(B.ID,A.rowNum) as ID,isnull(B.NAME,'占位') as NAME from
(select ROW_NUMBER() over (order by ID) as rowNum from table1) A
full join table1 B on A.rowNum=B.ID

Ⅲ 怎样编写SQL语句找到断号的地方

楼上2位的方法真不敢恭维,有了不断号的表还检查什么,
还有3天过期了,搂住不知道解决没有,要是还需要解决的话请在补充中注明~写语句出来要点时间,不过如果用创建临时表或者存储过程的话倒是有现成的
declare @temptable table(a int)

declare @char varchar(1000),@i int,@num int
set @num=(select max(cid) from table) --cid 为id字段
set @i=1
while @i<=@num
begin
insert @temptable values (@i)
set @i=@i+1
end
select a from @temptable where a not in (select cid from table)

Ⅳ 如何用sql语句查询断号

经过努力,解决了这个问题(此前,绝大多数的方法都是生成一个从最小直到最大值的连续序列过渡表,然后两表关联或利用子查询,查处源表中不存在的值),该方法比较简单也比较巧妙,思路如此:
断号的含义也就是不在源表中的号,但断号肯定是源表中的某个号码加上一个数得到的,也就是说,我第一步需要找到源表中的每一个值加1后(取名为f1)不存在源表序列中的值,然后以此为基础,在源表中找大于f1的最小值(取名f2),那么从f1到f2的值即为断号值,到此解决!!

语句如下(绝对原创):

SELECT f1, (select min(f)-1 from t where f>f1) as f2
FROM
(SELECT f+1 AS f1
FROM t
WHERE f+1 not in (select f from t) and f <(select max(f) from t)
) AS cc;

结果如下:
f1 f2
6 6
10 13

徐州 吴艳山

Ⅳ 怎么查询SQL中连续编号中间的断号

思路给你:

1、找到你的表中的连续编号的最小值。

2、找到你的表中的连续编号的最大值。

3、产生一个临时表,它的一个字段最小值到最大值连续产生记录。

4、找到临时表中的“那个字段中”的“记录”不在“你的表中”的“连续编号”中存在的所有记录。


参考代码如下:

--初参条件针对对象表LS_bas1数据库里的TA1表
--查TA1表中ID号不连续缺少的记录

--定义三个变量最小记录、最大记录、记录搜索用
DECLARE@MINIDINT,@MAXIDINT,@GOINTINT

--从TA1表中取得ID最小的、ID最大的记录
SELECT@MINID=MIN(ID),@MAXID=MAX(ID)FROMLS_bas1.DBO.TA1

--从最小记录开始循环向临时表#LSTAB里追加记录,以产生连续的GOID记录
SET@GOINT=@MINID
SELECT@GOINTASGOIDINTO#LSTAB
WHILE@GOINT<@MAXIDBEGIN
SET@GOINT=@GOINT+1
INSERTINTO#LSTAB(GOID)VALUES(@GOINT)
END

--将#LSTAB中GOID有,与TA1表ID中没有的记录找出来,就是你要的
SELECT*FROM#LSTAB
WHEREGOIDNOTIN(
SELECTIDFROMLS_bas1.DBO.TA1
)
ORDERBYGOID

--最后,好习惯,清理中间的临时表
DROPTABLE#LSTAB

Ⅵ sql 查询

select left(项目号,charindex('-',项目号)) as 项目名称,count(*) as 数量 from 表
group by left(项目号,charindex('-',项目号))

做出来后才发现有兄弟已经做出来了
呵呵
不过发现他做的有点不对,呵呵

Ⅶ 在mssql分组查询一组区间内的断号区间的sql语句

可以提供思路:

想要做到4-6,8-19可能比较复杂,但是想要把断号的找出来容易;

首先需要建一个没有断号的临时表:可以按照全宗号,目录号分组,取出各分组案卷号最大最小值,然后散开(注意:可能缺失的就是极值)散开的函数数据库都不一样(笛卡尔积也可以),pgsql有generate_series();

Ⅷ 如何用SQL语句求排除断号的号码串

我们经过分析发现,实现这一需求的难点主要有两点: 1. 如果要找出断号,用SQL语句实现,主要是要考虑性能; 2. 将排除断后的使用号码段的多条记录转换为一行显示,即用SQL实现行列转换; 如果通过编程来实现,这两点都不难,但通过SQL来实现,则需要一些技巧。 假设知道已用票据号为3,4,5,7,8,11,12,最小为3,最大为12,求断号的SQL如下: Select Rownum + (3 - 1)From DualConnect By Rownum

Ⅸ 我想在保存一条SQL记录时,查找并从已有的流水号中递增,如果有断号则自动补充

模仿自动编号很容易,只要查找最后一条记录的流水号,即可得出新的号
断号补充这个很难,难是难在,要让服务器不断的去查找,给服务器增加了负担

给个思路
断号的生成,自然是因为删除
而这儿的删除,可以用delete来删除,也可加个字段,用update来删除
只是后者并非真正删除,只是不让它显示而已
也就是说用update的方法,更新一个字段为不显示,比如说用0来表示不显示
这样在程序中用此字段判断,就跟删除一样了。

同时,在用update来“删除”此记录时,要在另一表中记录下此记录的流水号
那么,在添加新记录时,优先查找此表中的流水号,如果有,就直接将原表中的记录用update来更新为新记录。就可以了

这样的好处
1、因为没有使用delete,所以在数据库中原记录的样式会保留,即便是自动更新的ID也不会有变化
2、delete的确是很危险的命令,一旦使用,就无法挽回了。所以用update来替代,当发现错误时,可能还有补救。
3、使用另一表来存放被“删除”的记录,可有效降低服务器的工作量

Ⅹ sql查询问题

select
top
2
*
from
test
order
by
abs(id-10)
看看这样行不,按id-10的绝对值排序,

如果不包括id=10的话,在加个条件,
select
top
2
*
from
test
where
id<>10 order
by
abs(id-10)
这应该是取的id为10前后两个,
不过如果id为自增而且无断号的情况,上面的这种情况可以,如果有断号,那就有可能会出错,比如数据为id7,id10,id11,id12,
会区出id11,id12这两个值,而不是前后的两个,
如果是要前后的两个,
就用
select
top 1
* from
test
where
id>10
order
by
time asc
union
select
top
1
* from
test
where
id<10
order
by
time
desc