获取一系列数字中的缺失值

时间:2012-10-25 13:58:01

标签: sql-server ms-access ms-access-2010

我对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

如果有更好的方法,我不介意改变,但我真的很喜欢这个查询。

如果没有其他办法,我无法在访问中模拟行号,我将使用传递查询。

谢谢

2 个答案:

答案 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