如何将Google Sheet中的指定表格转换为1NF规范化表格?
将Google Sheets表格转换为符合第一范式(1NF)的格式
原始表格
| Process | Tool A | Tool B |
|---|---|---|
| Process 1 | Tool 1 | Tool 2 |
| Process 2 | Tool 1 | |
| Process 3 | Tool 2 | Tool 3 |
目标1NF表格
| Process | Tool A | Tool B |
|---|---|---|
| Process 1 | Tool 1 | |
| Process 1 | Tool 2 | |
| Process 2 | Tool 1 | |
| Process 3 | Tool 2 | |
| Process 3 | Tool 3 |
实现方法
方法1:使用QUERY + FLATTEN组合函数
假设原始数据位于单元格区域A1:C4(表头在A1:C1,数据行A2:C4),在空白单元格(例如E1)输入以下公式:
=QUERY(FLATTEN(A2:A4&"|"&B2:C4), "SELECT SPLIT(Col1, '|')[0], SPLIT(Col1, '|')[1], '' WHERE SPLIT(Col1, '|')[1] <> '' LABEL SPLIT(Col1, '|')[0] 'Process', SPLIT(Col1, '|')[1] 'Tool A', '' 'Tool B'")
- 逻辑说明:
FLATTEN(A2:A4&"|"&B2:C4)将每个Process与对应的Tool A、Tool B拼接为Process|Tool格式的字符串,再扁平化所有行,生成所有可能的Process-Tool组合。QUERY筛选掉Tool为空的记录,拆分字符串还原Process和Tool字段,同时保留空白的Tool B列并设置表头。
方法2:使用ARRAYFORMULA合并多组数据
通过合并两组数据(Process+Tool A、Process+Tool B),再过滤空值:
=ARRAYFORMULA(QUERY({ A2:A4, B2:B4, IFERROR(B2:B4/0, "") ; A2:A4, C2:C4, IFERROR(C2:C4/0, "") }, "WHERE Col2 <> '' ORDER BY Col1"))
- 逻辑说明:
- 构造两个子数组:第一组为Process+Tool A+空白Tool B,第二组为Process+Tool B+空白Tool B。
- 用
ARRAYFORMULA合并数组,再通过QUERY过滤掉Tool为空的行,并按Process排序。
内容的提问来源于stack exchange,提问作者Sax
相关产品推荐
相关产品推荐

