4

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

找到第一个未使用的提案编号。(这不是关于lastrecord +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

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

如果真的没有其他方法并且我无法在访问中模拟行号,我将使用直通查询。

谢谢

4

2 回答 2

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 是序号。

于 2012-10-25T16:58:18.247 回答
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
于 2015-04-26T05:20:17.067 回答