在SQL Server 2005中查找表中缺少的数字

时间:2012-10-22 05:35:56

标签: sql sql-server database tsql sql-server-2005

我的int数据类型列为No,并希望找到表中缺少的No number。

例如:1,2,3,7,8,9

Ans = 4,5,6

提前致谢。

3 个答案:

答案 0 :(得分:2)

只是在简单的sql:

SELECT a.id+1 AS start, MIN(b.id) - 1 AS end
FROM sequence AS a, sequence AS b
WHERE a.id < b.id
GROUP BY a.id
HAVING start < MIN(b.id)

您可以在Sqlfiddle

上试用

答案 1 :(得分:1)

尝试以下 -

DECLARE @TABLE TABLE (NUM INT)

INSERT INTO @TABLE
VALUES
 (1)
,(2)
,(3)
,(7)
,(8)
,(9)

DECLARE @MIN INT
DECLARE @MAX INT

SELECT @MIN = MIN(NUM) + 1, @MAX = MAX(NUM) - 1 FROM @TABLE

CREATE TABLE #TMP (FIELD_NO INT)
WHILE @MIN <= @MAX
BEGIN
   IF NOT EXISTS (SELECT * FROM @TABLE WHERE NUM = @MIN)
      INSERT INTO #TMP (FIELD_NO) VALUES (@MIN)
   SET @MIN = @MIN + 1
END

SELECT * FROM #TMP

DROP TABLE #TMP

答案 2 :(得分:1)

您可以使用table of numbers

我在这里使用范围为master..spt_values的{​​{1}}。您可以将其替换为您自己的具有足够值的数字表。

0-2047