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

如何直接对Google Sheets的QUERY结果执行Unpivot操作?

Google Sheets 基于QUERY结果实现Unpivot(扁平化)

Google Sheets的QUERY函数本身不支持直接执行Unpivot操作,它的SQL-like语法仅用于筛选、聚合、排序等常规查询,没有内置的Unpivot能力。但可以将你原有的QUERY过滤结果作为数据源,结合ARRAYFORMULA、FLATTEN、LET等函数整合为一个公式,实现过滤+Unpivot的一站式效果,满足你所需的数据库样式结构。

实现公式

假设你的CC列对应原数据表中的C列(若实际位置不同,可自行调整公式中的列索引),最终公式如下:

=ARRAYFORMULA(
  LET(
    filtered_data, QUERY('Variables VAC'!A5:AP500,"select A,B,C,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP where A is not null "),
    month_headers, QUERY('Variables VAC'!A4:AP4,"select AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP"),
    code_col, INDEX(filtered_data,,1),
    sbc_col, INDEX(filtered_data,,2),
    cc_col, INDEX(filtered_data,,3),
    unpivoted_months, FLATTEN(month_headers),
    unpivoted_amounts, FLATTEN(INDEX(filtered_data,,4):INDEX(filtered_data,,20)),
    QUERY(
      {unpivoted_months, code_col, sbc_col, unpivoted_amounts, cc_col},
      "select Col1,Col2,Col3,Col4,Col5 where Col4 is not null label Col1 'Month', Col2 'Code', Col3 'Sbc', Col4 'Amount', Col5 'CC'"
    )
  )
)

公式说明

  1. filtered_data:执行你原有的QUERY过滤逻辑,同时加入CC列(原数据表C列),作为后续Unpivot的数据源。
  2. month_headers:提取日期列(AB-AP)的表头,作为最终结果的Month字段值。
  3. 列提取:通过INDEX分别从过滤后的数据中提取Code、Sbc、CC列。
  4. Unpivot核心:
    • FLATTEN(month_headers):将横向的日期表头转为纵向列表,每个月份对应一行。
    • FLATTEN(INDEX(filtered_data,,4):INDEX(filtered_data,,20)):将横向的日期数值列转为纵向列表,与月份一一对应。
  5. 最终整理:用QUERY将所有纵向列组合,过滤掉空值的Amount行,并设置清晰的表头别名。

关键注意点

  • 若你的CC列并非原数据表C列,需修改filtered_data中的select语句,加入对应列,并调整cc_col的INDEX索引位置。
  • 若日期表头行不是A4,需修改month_headers中的范围(如A3:AP3)。

内容的提问来源于stack exchange,提问作者R_life_R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:15:35