我正在使用 SQL Server 2012。
我收到了“最大数量”f.e. 201900005 这告诉我范围从 201900000 开始(这是给定的)。现在我想收到这个范围内缺少的数字。
我已经查看了几个与此相关的问题,但我似乎无法让它发挥作用。通过使用 Between 或使用游标来对照表本身进行检查。
Max Number = 201900005, Min Number = 201900000
test_table
+----------------+
| test_number |
+----------------+
| 201900001 |
| 201900003 |
| 201900004 |
+----------------+
result
+----------------+
| missing |
+----------------+
| 201900000 |
| 201900002 |
| 201900005 |
+----------------+
当前流程使用一个“帮助”表,该表本质上包含 201900000 到 201900005 之间的所有数字(在实际情况下要多得多),并将这些数字与 test_table 中的一次进行比较。
如果有任何建议,我将不胜感激。
就我个人而言,我会使用 Tally 创建所有可能数字的列表,然后LEFT JOIN
列出您的表并返回不匹配的行:
CREATE TABLE dbo.Test_Table (Test_Number int);
INSERT INTO dbo.Test_Table (Test_Number)
VALUES(201900001),(201900003),(201900004);
GO
DECLARE @Start int = 201900000,
@End int = 201900005;
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
SELECT TOP (@End - @Start +1) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1 + @Start AS I
FROM N N1, N N2, N N3) --1000 rows, if you need more, just add more
SELECT T.I
FROM Tally T
LEFT JOIN dbo.Test_Table TT ON T.I = TT.Test_Number
WHERE TT.Test_Number IS NULL;
GO
DROP TABLE dbo.Test_Table;
数据库小提琴
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)