我在MS Access中有一个检查寄存器列表,我需要创建一个查询以生成缺少的检查编号,可以单独列出单个丢失的检查的特定列表,也可以创建一个缺少检查范围的列表。我在一家每天发行数千张支票的公司工作,因此创建一个具有每个可能数字以匹配寄存器的表格都不可行。
我找到了很多解决方案,但是大多数都是Access不喜欢的SQL风格。
我对编码非常陌生,对Access还是有些陌生(Excel是我的驾驶室)
检查号码列名称=号码,检查寄存器表名称=支票 支票号码示例= 9308,9557,9724,9891,9908,9909,9934,9983
我解决了这个问题:SQL: find missing IDs in a table
SELECT DISTINCT Number +1 AS MissingFrom
FROM Checks
WHERE Number + 1 NOT IN (SELECT DISTINCT Number FROM Checks);
哪个会生成缺失范围内的第一个数字(9309) 9558,9725,9892,9910,9935,9984)
和
SELECT DISTINCT Number-1 AS MissingTo
FROM Checks
WHERE ((([Number]-1) Not In (SELECT DISTINCT Number FROM Checks)))
ORDER BY Number-1;
产生遗漏范围内的最后一个数字(9307,9556,9723,9890,9907,9933,9982)
因为我的第一个支票号码是9308,所以9307并不是必须的,这导致我在尝试合并两个查询时遇到问题
我也尝试过
SELECT ([Number]+1) AS MissingFrom, DMin("Number","Checks","Number>" & [Number]) AS MissingTo
FROM Checks
WHERE (((DMin("Number","Checks","Number>" & [Number]))<>([Number]+1)));
我认为第二个选项可能会解决第一个选项的问题,但我收到此错误“条件表达式中的数据类型不匹配”,并且不确定如何更正它。 也许我应该采取不同的做法,但是我被困在这一点上。任何帮助表示赞赏。 上面的帖子被标记为该帖子的重复 How to add dummy rows in MakeTable Query - Access 2000? 但是,古斯塔夫(Gustav)提出的原始答案不再是有效的链接,并且由于我没有足够的观点,因此我无法发表评论。 另外,对原始问题的第一个答案是关于创建虚拟表并将两个表连接在一起,在这种情况下不可行