Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SQL从表的单列中查找缺少的数字?_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

如何使用SQL从表的单列中查找缺少的数字?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,共有999行,它们具有不同的0-1000号,其中缺少一个数字。如何使用SQL查询查找该数字?使用类似以下内容: SELECT Min(ID) As firstMissedID FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY ID) rn FROM std) dt WHERE rn < ID 不确定这是否是最好的方法,但它会起作用 创建一个临时表,其中包含一列以保存整数值 =@BL1 使用值1到1000填充表,然后运行此查询,只有在

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

使用类似以下内容:

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

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

创建一个临时表,其中包含一列以保存整数值 =@BL1

使用值1到1000填充表,然后运行此查询,只有在datatable中不包含条目时,此查询才会返回条目

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

select语句将返回所有缺少的值。

我假设number列中只有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
使用计数表获得1000行的列表,然后使用LEFT OUTER JOIN或NOT 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 
如果要查找缺失号码的列表,请从最后一个select查询中删除MIN运算符


真的吗?对不起,罗丝!请原谅愚蠢的错误你确定你有999列吗??如果是的话,那么我认为数据库设计中存在一个问题。不管怎样,但是您使用的是哪种DBMS。。是mysql还是sql server?可能是Ingenious的复制品。我投了票。但如果OP假设是错误的呢。然后是方法。简洁的解决方案。但是只适用于固定的数据集。谢谢:…但是如果假设总是正确的话,那么就没有问题了..我认为它会更快..而且我们可以删除500500的硬编码值,使之成为n个值的总和..而无需创建任何额外的表和繁重的代码。如果我们假设表是“std”和列名,您知道会发生什么吗“id”中有9条记录,其中0-10个条目之间缺少编号3。现在请给我具体的询问。
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