我在T-SQL此列:查找列缺號
1
2
3
7
10
有SQL中爲序列4,5,6和8,9 我有嘗試檢測丟失號碼的功能 類似 如果(ab> 1)那麼我們有一個缺少的號碼
與coalesce但我不明白。 感謝任何方向
我在T-SQL此列:查找列缺號
1
2
3
7
10
有SQL中爲序列4,5,6和8,9 我有嘗試檢測丟失號碼的功能 類似 如果(ab> 1)那麼我們有一個缺少的號碼
與coalesce但我不明白。 感謝任何方向
你可以試試這個:
DELCARE @a
SET @a = SELECT MIN(number) FROM table
WHILE (SELECT MAX(number) FROM table) > @a
BEGIN
IF @a NOT IN (SELECT number FROM table)
PRINT @a
SET @[email protected]+1
END
#winces#儘管這可能起作用,但SQL最適合在'sets'中工作;基本上,沒有迭代器/循環。循環的某些應用可能會帶來更好的性能,但它幾乎總是會被基於集合的方法所打敗。 – 2013-03-19 16:12:43
@ Clockwork-Muse OK集合通常比光標快。請針對所述問題提出一套基於解決方案。 – Paparazzi 2013-03-19 16:20:05
下面的查詢將找出每個序列開始和數量缺失:
select t.col + 1 as MissingStart, (nextval - col - 1) as MissingSequenceLength
from (select t.col,
(select min(t.col) from t t2 where t2.col > t.col) as nextval
from t
) t
where nextval - col > 1
這是通過使用相關子查詢獲取表格中的下一個值。
我知道這是一個遲到的回答,但這裏是一個使用遞歸表表達式得到一個表中的最小值和最大值之間的遺漏值的查詢:
WITH CTE AS
(
--This is called once to get the minimum and maximum values
SELECT nMin = MIN(t.ID), MAX(t.ID) as 'nMax'
FROM Test t
UNION ALL
--This is called multiple times until the condition is met
SELECT nMin + 1, nMax
FROM CTE
WHERE nMin < nMax
)
--Retrieves all the missing values in the table.
SELECT c.nMin
FROM CTE c
WHERE NOT EXISTS
(
SELECT ID
FROM Test
WHERE c.nMin = ID
)
這是用下面的測試模式:
CREATE TABLE Test
(
ID int NOT NULL
)
INSERT INTO Test
Values(1)
INSERT INTO Test
Values(2)
INSERT INTO Test
Values(3)
INSERT INTO Test
Values(7)
INSERT INTO Test
Values(10)
這將有助於如果您發佈的功能... – 2013-03-19 14:58:22
如果您有這樣的功能,您的問題是什麼? – 2013-03-19 15:27:03
@GordonLinoff「有SQL函數...」可能意思是「有SQL函數...?」儘管這當然只是一個有教養的猜測 – Pondlife 2013-03-19 17:10:05