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

如何使用普通SQL遍历查询结果 按CountRollIDs重复行并生成递增RollID

普通SQL可以实现该需求,主流数据库通用的方案是使用递归公共表表达式(递归CTE),无需额外的存储过程或自定义函数,适配MySQL 8.0+、PostgreSQL、SQL Server、Oracle等绝大多数主流数据库环境。

假设你查询的原始表名为your_table,可直接使用如下SQL实现需求:

WITH RECURSIVE generate_rolls AS (
    -- 锚点成员:读取原始行作为第一行结果
    SELECT RollID, ItemCode, Quantity, DocNum, CountRollIDs, 1 AS current_seq
    FROM your_table
    -- 此处可填写你原查询的过滤条件,锁定需要展开的行
    UNION ALL
    -- 递归成员:逐行生成递增的RollID,直到达到CountRollIDs指定的次数
    SELECT RollID + 1, ItemCode, Quantity, DocNum, CountRollIDs, current_seq + 1
    FROM generate_rolls
    WHERE current_seq < CountRollIDs
)
-- 输出最终结果,剔除辅助计算用的current_seq字段
SELECT RollID, ItemCode, Quantity, DocNum, CountRollIDs
FROM generate_rolls;

上述代码执行后会自动将原始行按CountRollIDs的数值展开为对应行数,RollID从初始值开始逐行+1递增,完全匹配需求。

如果你的数据库版本较低不支持递归CTE(比如MySQL 5.x),可以提前创建一张存储连续数字的辅助表numbers(表内仅含字段n,存储1、2、3……的连续值,最大值大于业务中可能出现的最大CountRollIDs即可),使用关联查询实现:

SELECT 
    t.RollID + n.n - 1 AS RollID,
    t.ItemCode,
    t.Quantity,
    t.DocNum,
    t.CountRollIDs
FROM your_table t
INNER JOIN numbers n ON n.n <= t.CountRollIDs
-- 此处填写原查询的过滤条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:36:07