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

如何按ID分组生成两列数值间的连续数字列表?

解决方案

方法1:递归CTE实现(SQL Server 2005+)

递归CTE可以逐行展开每个ID对应的数值区间,是直观的实现方式:

WITH RecursiveNumbers AS (
    -- 锚点:取出每条记录的起始值
    SELECT id, beg AS 数值, ending
    FROM #temp
    UNION ALL
    -- 递归:每次数值+1,直到达到结束值
    SELECT id, 数值 + 1, ending
    FROM RecursiveNumbers
    WHERE 数值 + 1 <= ending
)
SELECT id, 数值
FROM RecursiveNumbers
ORDER BY id, 数值
OPTION (MAXRECURSION 0); -- 解除默认递归深度限制,适用于大区间场景

方法2:数字表关联(性能更优)

如果处理的区间范围较大,递归CTE性能可能不足,可通过预先生成的数字表关联筛选:

利用系统内置数字表

SQL Server的master..spt_values表包含0-2047的连续整数,适合区间较小的场景:

SELECT t.id, v.number AS 数值
FROM #temp t
JOIN master..spt_values v 
  ON v.number BETWEEN t.beg AND t.ending
WHERE v.type = 'P' -- 筛选正整数类型的记录
ORDER BY t.id, v.number;

自定义大数字表

若区间超过2047,可自行生成足够大的数字序列:

WITH Numbers AS (
    SELECT 1 AS number
    UNION ALL
    SELECT number + 1
    FROM Numbers
    WHERE number + 1 <= 10000 -- 按需调整最大数值
)
SELECT t.id, n.number AS 数值
FROM #temp t
JOIN Numbers n 
  ON n.number BETWEEN t.beg AND t.ending
ORDER BY t.id, n.number
OPTION (MAXRECURSION 0);

两种方法都能输出你期望的结果集,可根据数据量和区间大小选择合适的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:36:18