将 mysql 行分成 n 个不同的行

问题描述 投票:0回答:1

我公司的客户有一个表来存储库存数据,这个库存使用一个名为product_code的列来分隔产品,它还有另一个名为Qtd的列来存储有多少相同的产品库存。我需要帮助的是,我需要将这一行产品分成 n 个不同的行,其中 n 是存储在 Qtd 中的值。示例:

原文:

产品代码 Qtd
1 111 15

新:

产品代码 Qtd
1 111 1
2 111 1
3 111 1
... ... ...
14 111 1
15 111 1

我需要创建这个新行,因为他们试图引入一个代表产品序列号的新列,该列是唯一的,并且我无法使用联接,因为该序列号存储在不同的数据库中。我们有一种方法可以根据产品代码为产品分配序列号,但只有第一个序列号能够正确配对,如果可能的话,将这一行分成不同的行将以实用的方式解决这个特定问题当然。

我们尝试使用我们的软件执行此操作,但最终仅将第一个序列号分配给一行,而所有其他序列号均未使用。我们希望这次尝试能够将数据分成不同的行。

sql mysql data-manipulation
1个回答
0
投票

理想情况下,您在整个桌子上执行此操作,而没有其他任何东西改变它。 如果需要支持并发活动,那就复杂很多了。

首先准备创建一个新表来获取新行:

create table new_inventory like inventory;
rename table inventory to old_inventory, new_inventory to inventory;

然后使用递归 cte 插入分割行来生成它们:

insert into inventory (product_code, Qtd)
with recursive generate_rows as (
  select product_code, Qtd from old_inventory
  union all
  select product_code, Qtd-1 from generate_rows where Qtd > 1
)
select product_code, 1 Qtd from generate_rows;
© www.soinside.com 2019 - 2024. All rights reserved.