Sql server 查询以获取缺失序列号的列表

Sql server 查询以获取缺失序列号的列表,sql-server,Sql Server,我设置了一个查询,它查看orders表,并获取缺少的顺序订单号列表,因此我们可以使用该列表帮助跟踪缺少的订单。 它似乎工作得很好,只是如果一行中有多个数字,我只能得到第一个数字。 那么,如果结果应该是:1,5,6,10 我得到的是:1,5,10 6号被遗漏了 我不是SQL大师,我不太清楚应该在代码中修改什么以确保我得到所有这些。以下是我的代码: DECLARE @maxorder INT SET @maxorder = (SELECT MAX(CAST(TranNo) AS INT) FROM

我设置了一个查询,它查看orders表,并获取缺少的顺序订单号列表,因此我们可以使用该列表帮助跟踪缺少的订单。 它似乎工作得很好,只是如果一行中有多个数字,我只能得到第一个数字。 那么,如果结果应该是:1,5,6,10 我得到的是:1,5,10 6号被遗漏了

我不是SQL大师,我不太清楚应该在代码中修改什么以确保我得到所有这些。以下是我的代码:

DECLARE @maxorder INT
SET @maxorder = (SELECT MAX(CAST(TranNo) AS INT)
FROM SalesOrder 
WHERE TranDate 
BETWEEN getdate()-1 AND DATEADD(DAY, 1, GETDATE()))
SELECT a.offset AS Missing
FROM 
(SELECT 1 AS Offset
UNION
SELECT CAST((TranNo) AS INT) + 1
FROM SalesOrder
WHERE TranDate BETWEEN GETDATE()-1 AND DATEADD(DAY, 1, GETDATE())) a
LEFT JOIN
(SELECT CAST((TranNo) AS INT) AS TranNum 
FROM SalesOrder 
WHERE TranDate BETWEEN getdate()-1 AND DATEADD(DAY, 1, GETDATE())) b 
ON a.offset = b.trannum
WHERE 
a.offset > 1 
AND b.trannum IS NULL
AND a.offset < @maxorder
ORDER BY Missing

提前谢谢

什么版本的SQL?在以后的版本中,有一些非常简单的方法可以解决这个问题。另外,一些示例数据以及基于这些数据您希望看到的内容也会很有帮助。获取最小值和最大值。用整个范围填充临时表。然后在数据为空的条件下左/右连接这两个。您将看到所有丢失的记录示例数据:860928609486101预期值:8609286094860958609686101ts,我不确定如何执行该操作。我不是SQL方面的专家。我看看能不能弄明白。谢谢各位,谢谢你们。这让我开始着手解决这个问题。我很感激!我使用了一个表变量而不是临时表,并添加和移动了一些东西,它就像一个符咒。令人惊叹的
DECLARE @maxorder INT, @counter INT = 1 --Set this to your lower bound for SalesOrder table

SELECT @maxorder = MAX(CAST(TranNo AS INT))
FROM SalesOrder

CREATE TABLE #temp (TranNum INT)

WHILE @counter <= @maxorder
BEGIN
    INSERT INTO #temp (TranNum) values (@counter)
END

SELECT t.TranNum
FROM #temp t
LEFT OUTER JOIN SalesOrder s ON t.TranNum = CAST(s.TranNo AS INT)
WHERE s.TranNo is null
ORDER BY t.TranNum