如何在Google Sheets中实现多列数据转多行(类Union效果)
在Google Sheets中实现多列转多行(类似SQL Union效果)
原始数据
| Col1 | Col2 | Col3 | Col4 | Col5 | Col6 | Col7 |
|---|---|---|---|---|---|---|
| Person | Info1 | Info2 | Info3 | Item1 | Item2 | Item3 |
| Person1 | 10-12 | M | green | ball | truck | book |
| Person2 | 3-5 | M | yellow | necklace | doll | stroller |
目标格式
| Person | Info1 | Info2 | Info3 | Item |
|---|---|---|---|---|
| Person1 | 10-12 | M | green | ball |
| Person1 | 10-12 | M | green | truck |
| Person1 | 10-12 | M | green | book |
| Person2 | 3-5 | M | yellow | necklace |
| Person2 | 3-5 | M | yellow | doll |
| Person2 | 3-5 | M | yellow | stroller |
解决方案
方法1:用QUERY模拟SQL Union逻辑
假设原始数据位于A1:G3(表头在第1行),在空白单元格输入以下公式:
=QUERY({ QUERY(A2:G, "select Col1,Col2,Col3,Col4,Col5 where Col1 is not null", 0); QUERY(A2:G, "select Col1,Col2,Col3,Col4,Col6 where Col1 is not null", 0); QUERY(A2:G, "select Col1,Col2,Col3,Col4,Col7 where Col1 is not null", 0) }, "select * where Col1 is not null", 0)
执行后会生成无表头的结果,手动添加Person、Info1、Info2、Info3、Item表头即可。
方法2:用ARRAYFORMULA+FLATTEN一键生成
如果需要更简洁的公式,可利用FLATTEN展开多列,同时重复前置信息:
=ARRAYFORMULA({ SPLIT(FLATTEN(REPT(A2:A&"|"&B2:B&"|"&C2:C&"|"&D2:D&"|", 3)), "|"), FLATTEN(E2:G) })
REPT函数将每行的前置信息重复3次(对应3个Item列),用|分隔方便后续拆分FLATTEN将重复后的信息和Item列都转为单行序列SPLIT把分隔的前置信息拆回多列,最终直接生成完整的内容行,最后添加表头即可
如果后续Item列数量变化,只需修改REPT的第二个参数(改为Item列的数量),同时调整FLATTEN的范围(比如E2:H对应4列)。
内容的提问来源于stack exchange,提问作者danhustonii
相关产品推荐
相关产品推荐

