如何使用SQL从表的单列中查找缺失的数字?

时间:2015-07-13 05:07:33

标签: sql sql-server sql-server-2008

有999行,它们有0到1000个不同的数字,其中缺少一个数字。如何使用SQL查询找到该数字?

4 个答案:

答案 0 :(得分:2)

使用类似的东西:

SELECT Min(ID) As firstMissedID
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY ID) rn
    FROM std) dt
WHERE rn < ID

答案 1 :(得分:0)

不确定这是否是最佳方法,但它会起作用。

使用列创建临时表以保存整数值 = @ temptbl1

使用值1到1000填充表格,然后运行此查询,只有在数据表中没有包含该条目时才会返回该条目。

select value from @temptable1 where value not in (select Othervalue from othertable)

select语句将返回所有缺失值。

答案 2 :(得分:0)

我假设数字列只有0到1000之间的数字。

declare @minnumber int 
declare @missingnumber int

select @minnumber=min(number) from Test

if(@minnumber=0)
begin
    --500500 is the sum of 1 to 1000 number
    select @missingnumber=500500-sum(number) from Test
end
else
begin
    set @missingnumber=0
end

答案 3 :(得分:0)

使用tally table获取1000行的列表,然后使用LEFT OUTER JOINNOT EXISTS查找丢失的数字

WITH Tally (n) AS
(
    -- 1000 rows
    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
    FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n)
    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n)
    CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n)
)
SELECT Min(n)
FROM   Tally T
        LEFT OUTER JOIN YOURTABLE Y
                    ON T.N = Y.MISSING_NUM_COLUMN
WHERE  Y.MISSING_NUM_COLUMN IS NULL 

如果您想查找缺失数字的列表,请从上一次MIN查询中删除select运算符。

SELECT Missing_Numbers = n 
FROM   Tally T
        LEFT OUTER JOIN YOURTABLE Y
                    ON T.N = Y.MISSING_NUM_COLUMN
WHERE  Y.MISSING_NUM_COLUMN IS NULL