You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中生成两列值间的连续序列?

在SQL Server中生成账户区间连续序列的实现方法

当然可以实现,下面提供两种常用的解决方案:

方法一:递归CTE(适用于区间范围较小的场景)

递归CTE是生成连续序列的常用方式,通过递归逐步生成FromAccount到ToAccount之间的每个数值:

WITH AccountSequence AS (
    -- 锚点成员:取原始表的初始记录
    SELECT 
        FromAccount AS Account,
        ToAccount,
        Team,
        Location
    FROM YourTableName
    UNION ALL
    -- 递归成员:每次将Account加1,直到达到ToAccount
    SELECT 
        Account + 1,
        ToAccount,
        Team,
        Location
    FROM AccountSequence
    WHERE Account < ToAccount
)
-- 最终查询,只保留需要的列
SELECT 
    Account,
    Team,
    Location
FROM AccountSequence
ORDER BY Account;

说明

  • 替换YourTableName为你的实际表名
  • 如果区间范围较大(比如超过10000条),需要增加递归深度限制,在查询末尾加上OPTION (MAXRECURSION 0)(0表示无限制)

方法二:使用数字表(适用于大区间场景,效率更高)

如果你的账户区间范围很大,递归CTE可能效率不足,可以预先生成一个包含足够多连续数字的表,再和原始表关联:

步骤1:生成临时数字表(示例生成1到10000的数字)

-- 生成临时数字表
WITH Numbers AS (
    SELECT 1 AS Num
    UNION ALL
    SELECT Num + 1
    FROM Numbers
    WHERE Num < 10000
)
SELECT Num INTO #TempNumbers FROM Numbers OPTION (MAXRECURSION 0);

步骤2:关联原始表生成结果

SELECT 
    t.FromAccount + n.Num - 1 AS Account,
    t.Team,
    t.Location
FROM YourTableName t
JOIN #TempNumbers n 
    ON n.Num <= (t.ToAccount - t.FromAccount + 1)
ORDER BY Account;

-- 使用完后删除临时表
DROP TABLE #TempNumbers;

说明

  • 可以根据实际最大区间范围调整数字表的生成上限
  • 也可以创建永久的数字表,重复使用以提升效率

测试验证

用你提供的测试数据:

FromAccountToAccountTeamLocation
100150a5
151300b4
301322c4

执行上述查询后,会生成从100到150、151到300、301到322的所有连续Account记录,并对应各自的Team和Location信息。

内容的提问来源于stack exchange,提问作者FindAnalysy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:56:09