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

如何根据Quantity列值将Barcode列分号分隔值拆分为对应数量独立行

按Quantity字段生成对应行数并拆分Barcode字段处理方案
  • 核心处理规则:
    1. 最终输出的行数与每行的Quantity值完全一致
    2. 原表Barcode字段为英文分号;分隔的字符串,拆分后每个独立值依次作为对应行的Barcode取值
    3. 若拆分后的Barcode总数量小于Quantity值,剩余行的Barcode字段留空即可(已明确拆分后Barcode数量不会超过Quantity值)

示例输入:

| Name         | Quantity    | Barcode
+--------------+-------------+-----------------------------
| Apple        | 5           | barcode1;barcode2;barcode3

预期输出:

| Name         | Barcode
+--------------+----------
| Apple        | barcode1
| Apple        | barcode2
| Apple        | barcode3
| Apple        | 
| Apple        | 

Pandas 实现代码

import pandas as pd
import numpy as np

# 示例源数据,可替换为自己的读表逻辑
df = pd.DataFrame({
    "Name": ["Apple"],
    "Quantity": [5],
    "Barcode": ["barcode1;barcode2;barcode3"]
})

def expand_row(row):
    barcodes = row["Barcode"].split(";")
    # 补空值到Quantity指定长度
    barcodes += [""] * (row["Quantity"] - len(barcodes))
    return pd.DataFrame({
        "Name": [row["Name"]]*row["Quantity"],
        "Barcode": barcodes
    })

# 逐行处理后合并得到结果
result_df = pd.concat(df.apply(expand_row, axis=1).tolist(), ignore_index=True)
print(result_df)

MySQL 8.0+ 实现代码

WITH RECURSIVE num_seq AS (
    -- 生成数字序列,最大数值可按需调整
    SELECT 1 AS n UNION ALL SELECT n + 1 FROM num_seq WHERE n < 1000
),
source_data AS (
    -- 替换为自己的源数据表查询
    SELECT 'Apple' AS Name, 5 AS Quantity, 'barcode1;barcode2;barcode3' AS Barcode
)
SELECT 
    s.Name,
    IF(n.n <= LENGTH(s.Barcode) - LENGTH(REPLACE(s.Barcode, ';', '')) + 1, 
       SUBSTRING_INDEX(SUBSTRING_INDEX(s.Barcode, ';', n.n), ';', -1), 
       '') AS Barcode
FROM source_data s
JOIN num_seq n ON n.n <= s.Quantity;

内容的提问来源于stack exchange,提问作者Lee Wen Ping

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:15:09