我对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)
但我意识到访问不支持ROW_NUMBER
。
我看了,我找不到类似的东西。
有人知道如何在访问中获得与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
如果有更好的方法,我不介意改变,但我真的很喜欢这个查询。
如果没有其他办法,我无法在访问中模拟行号,我将使用传递查询。
谢谢
答案 0 :(得分:4)
从你的问题看来,你正在寻找一系列数字的差距,所以:
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是序列号。
答案 1 :(得分:0)
SELECT T.Value, T.next -1 FROM (
SELECT b.Value , (
SELECT Top 1 Value
FROM tblSequence a
WHERE a.Value > b.Value) AS [next]
FROM tblSequence b
) T WHERE T.next <> T.Value +1