我对 SQL Server 后端进行了以下查询
SELECT TOP(1) (v.rownum + 99)
FROM
(
SELECT incrementNo-99 as id, ROW_NUMBER() OVER (ORDER BY incrementNo) as rownum
FROM proposals
WHERE [year] = '12'
) as v
WHERE v.rownum <> v.id
ORDER BY v.rownum
查找第一个未使用的提案编号。 (与最后一条记录+1无关)
但我意识到 Access 不支持ROW_NUMBER
。
我查了一下,没有找到类似的东西。
有人知道如何在 Access 中获得与 ROW_NUMBER
相同的结果吗?
也许有更好的方法来做到这一点。
实际上人们插入他们的提案No(incrementID)没有任何限制。这个数字看起来像这样 13-152。 xx- 代表当年,-xxx 是提案编号。最后 3 位数字应该是递增的,但在某些情况下,每年可能需要跳过 10 次一些数字。这就是为什么我不能自动增量的原因。
所以我执行此查询,以便当他们打开表单时,默认号码是第一个未使用的。
它是如何工作的:
因为数字从 100 开始,所以我选择 -99,所以它从 1 开始。
然后我将行号与 id 进行比较,看起来像这样
ROW NUMBER | ID
1 1 (100)
2 2 (101)
3 3 (102)
4 5 (104)<--------- WRONG
5 6 (105)
现在我知道我们跳过了 4。所以我返回 (4 - 99) = 103
如果有更好的方法,我不介意改变,但我真的很喜欢这个查询。
如果确实没有其他方法并且我无法在 Access 中模拟行号,我将使用传递查询。
谢谢
最佳答案
从您的问题看来,您正在寻找数字序列中的间隙,因此:
SELECT b.akey, (
SELECT Top 1 akey
FROM table1 a
WHERE a.akey > b.akey) AS [next]
FROM table1 AS b
WHERE (
SELECT Top 1 akey
FROM table1 a
WHERE a.akey > b.akey) <> [b].[akey]+1
ORDER BY b.akey
其中table1是表,akey是序列号。
关于sql-server - 获取数字序列中缺失的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070244/