Chr*_*ian 3 sql-server sql-server-2008
技术:SQL Server 2008
所以我尝试了一些我在SO上找到的选项,但没有真正为我提供明确的答案.
我有一个包含两列的表,(Transaction ID,GroupID),其中没有唯一值.例如:
TransID | GroupID
-----------------
23 | 4001
99 | 4001
63 | 4001
123 | 4001
77 | 2113
2645 | 2113
123 | 2113
99 | 2113
Run Code Online (Sandbox Code Playgroud)
最初,groupID是由用户随机选择的,但现在我们正在自动化它.事实是,我们保留现有数据库而不对现有数据进行任何更改(工作太多,收益太少)
有没有办法在表"GroupTransactions"上查询"GroupID"以获取GroupID> 2000的下一个可用值?
我想从下一个可用的问题开始,尽管可能与max + 1不一样吗?- 在这种情况下:
从整数列表开始,查找groupid列中不存在的那些,例如:
;WITH CTE_Numbers AS (
SELECT n = 2001
UNION ALL
SELECT n + 1 FROM CTE_Numbers WHERE n < 4000
)
SELECT top 1 n
FROM CTE_Numbers num
WHERE NOT EXISTS (SELECT 1 FROM MyTable tab WHERE num.n = tab.groupid)
ORDER BY n
Run Code Online (Sandbox Code Playgroud)
注意:您需要调整2001/4000CTE中的值以允许您想要的范围.我假设你的桌子的名字MyTable