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

SQL如何根据Qty字段值输出对应数量的Part重复记录

SQL按Qty字段生成对应重复记录的实现方案

核心思路是构造连续数字序列,将数字序列和原零件表关联,关联条件为数字值小于等于对应记录的Qty值,即可生成对应数目的重复行。

方案1:通用递归CTE方案(兼容所有支持递归CTE的主流数据库:MySQL 8.0+ / PostgreSQL / SQL Server / Oracle 11g+)

无需额外建表,适配大多数场景,示例代码如下(假设原表名为part_qty):

-- 构造从1到最大Qty值的连续数字序列
WITH RECURSIVE num_sequence(n) AS (
    SELECT 1
    UNION ALL
    SELECT n + 1 FROM num_sequence WHERE n < (SELECT MAX(Qty) FROM part_qty)
)
-- 关联原表生成重复记录
SELECT p.Part, p.Qty
FROM part_qty p
INNER JOIN num_sequence ns ON ns.n <= p.Qty;

注意事项:

  • 如果你的Qty最大值超过数据库默认递归深度,需手动调整参数:MySQL执行SET @@cte_max_recursion_depth = 1000;,SQL Server在语句末尾加OPTION (MAXRECURSION 1000)

方案2:PostgreSQL专属高效方案

PostgreSQL内置generate_series函数可以直接生成指定范围的连续值,语法更简洁,性能优于递归方案:

SELECT p.Part, p.Qty
FROM part_qty p, generate_series(1, p.Qty);

方案3:全版本兼容方案(适配不支持CTE的低版本数据库,比如MySQL 5.x)

提前创建一个数字辅助表nums,存储1到超过你业务最大Qty值的连续整数,一次创建可永久使用:

-- 建辅助表
CREATE TABLE nums (n INT PRIMARY KEY);
-- 插入足够多的连续数字,示例插入到1000,可根据业务需要调整
INSERT INTO nums(n) VALUES (1),(2),(3),...,(1000);

关联查询逻辑:

SELECT p.Part, p.Qty
FROM part_qty p
INNER JOIN nums n ON n.n <= p.Qty;

该方案性能最优,适合数据量较大的生产场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:24:04