當前位置:首頁 » 編程語言 » 斷號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