如何拆分含多ASIN的列并与对应EAN重组替换原行?
解决方案:拆分多值ASIN列并与EAN配对
Google Sheets 操作方法
如果用Google Sheets处理,有两种简单的实现方式:
方式1:快速拼接再分列
- 假设EAN在A列,ASIN在B列,数据从第2行开始(第1行是表头)
- 在空白列(比如C2)输入公式:
=ARRAYFORMULA(FLATTEN(IF(SPLIT(B2:B, ",|_", TRUE, TRUE)="",,A2:A&"|"&SPLIT(B2:B, ",|_", TRUE, TRUE)))) - 公式会自动遍历所有行,把逗号/下划线分隔的ASIN拆成单个值,和对应EAN用竖线拼接后扁平化输出
- 得到结果后,复制整列→右键粘贴为「值」,再用「数据」→「分列」,选竖线作为分隔符,就能得到拆分后的EAN和ASIN两列
方式2:直接输出拆分后的两列
如果不想手动分列,用QUERY+UNNEST组合公式一步到位:
=QUERY( UNNEST( ARRAYFORMULA( MAP(A2:A, B2:B, LAMBDA(ean, asins, IF(asins="",, ARRAYFORMULA(ean&"|"&SPLIT(asins, ",|_", TRUE, TRUE)) ) )) ) ), "SELECT SPLIT(Col1, '|')[OFFSET(0)] AS EAN, SPLIT(Col1, '|')[OFFSET(1)] AS ASIN WHERE Col1 IS NOT NULL", 1 )
BigQuery SQL 实现
如果是在BigQuery中处理数据,直接用UNNEST配合正则替换统一分隔符即可:
SELECT ean, TRIM(asin) AS asin FROM `your_project.your_dataset.product_data`, UNNEST(SPLIT(REGEXP_REPLACE(asins, ',|_', ','), ',')) AS asin WHERE asins IS NOT NULL AND asins != ''
- 先用
REGEXP_REPLACE把下划线替换成逗号,统一用逗号作为分隔符 SPLIT把ASIN字符串转成数组,UNNEST把数组拆成多行,每一行对应原EAN和单个ASINTRIM用来清理ASIN前后可能存在的空格
为什么之前的SPLIT+OFFSET不行?
SPLIT返回的是数组,OFFSET只能取数组里的某一个位置的元素,没法批量把所有元素拆成单独行。而UNNEST的核心作用就是把数组「摊平」成多行,刚好适配你要把一个单元格里的多值拆成多行的需求。
内容的提问来源于stack exchange,提问作者user20777937
相关产品推荐
相关产品推荐

