如何使用SQL从表的单列中查找缺少的数字?
共有999行,它们具有不同的0-1000号,其中缺少一个数字。如何使用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填充表,然后运行此查询,只有在
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