求助:在Google Sheet中使用QUERY函数实现数据提取与结构转换
Google Sheet 结构转换 QUERY 函数实现方案
以下针对两种常见的结构转换场景给出具体语法,你可以根据自己的A/B/C实际结构调整单元格范围:
场景1:宽表(A结构)转长表(B结构)
假设A结构是每行对应一个主体,多列对应不同属性(如姓名+多科目分数),要转换为每行对应单个属性的长表结构:
示例数据(A结构)
| 姓名 | 语文 | 数学 | 英语 |
|---|---|---|---|
| 张三 | 80 | 90 | 85 |
| 李四 | 75 | 88 | 92 |
目标结构(B结构)
| 姓名 | 科目 | 分数 |
|---|---|---|
| 张三 | 语文 | 80 |
| 张三 | 数学 | 90 |
| 张三 | 英语 | 85 |
| 李四 | 语文 | 75 |
| 李四 | 数学 | 88 |
| 李四 | 英语 | 92 |
函数语法
=QUERY( FLATTEN( ARRAYFORMULA( A2:A&"|"&B1:D1&"|"&B2:D ) ), "SELECT SPLIT(Col1, '|') WHERE Col1 IS NOT NULL LABEL SPLIT(Col1, '|') ''", 0 )
- 调整
A2:A为主体列范围,B1:D1为属性表头范围,B2:D为属性值范围 FLATTEN将多列数据拆分为单行,SPLIT把拼接的字符串拆分为多列
场景2:长表(A结构)转宽表(C结构)
假设A结构是每行对应单个属性记录,要转换为每行对应一个主体、多列聚合属性的宽表结构:
示例数据(A结构)
| 姓名 | 科目 | 分数 |
|---|---|---|
| 张三 | 语文 | 80 |
| 张三 | 数学 | 90 |
| 李四 | 语文 | 75 |
| 李四 | 数学 | 88 |
目标结构(C结构)
| 姓名 | 语文 | 数学 |
|---|---|---|
| 张三 | 80 | 90 |
| 李四 | 75 | 88 |
函数语法
=QUERY(A2:C, "SELECT A, MAX(C) WHERE A IS NOT NULL GROUP BY A PIVOT B", 1)
- 调整
A2:C为原始数据范围,A为分组列,C为聚合值列,B为透视列 PIVOT是QUERY的核心透视语法,将行值转为列名,MAX用于聚合(如果有重复记录可根据需求换SUM/AVG等)
内容的提问来源于stack exchange,提问作者Luco
相关产品推荐
相关产品推荐

