如何用Google Sheets QUERY公式将月度列转换为月份-数值列结构
Google Sheets 宽表转窄表(逆透视)公式实现方案
当然可以用公式实现这种仅转置月度列的逆透视操作,无需依赖数据透视表,直接用ARRAYFORMULA+FLATTEN+SPLIT+QUERY组合就能搞定,实时同步原数据更新:
核心公式
假设你的数据集在A1:O区域(第一行是表头),直接在空白单元格输入以下公式:
=ARRAYFORMULA(QUERY(SPLIT(FLATTEN( A2:A&"|"&B2:B&"|"&C2:C&"|"&D1:O1&"|"&D2:O), "|"), "select Col1,Col2,Col3,Col4,Col5 where Col5 is not null label Col1 'CostCentre', Col2 'LedgerAccount', Col3 'SpendCategory', Col4 'Month', Col5 'Value'"))
公式拆解
FLATTEN:把前3列的每条记录,分别和对应月度表头、月度数值拼接成字符串(用|做分隔符),然后把所有拼接后的内容扁平化变成单列SPLIT:把扁平化后的字符串按|拆分成5列,对应CostCentre/LedgerAccount/SpendCategory/Month/ValueQUERY:筛选掉数值为空的行,同时给每一列重命名成你需要的表头ARRAYFORMULA:让公式自动应用到整组数据,不用下拉填充
注意事项
- 如果你的数据里本身包含
|字符,把公式里的|换成其他不会冲突的分隔符(比如^或~) - 1万条记录的规模下,这个公式的运行效率完全够用,且会实时同步原数据的修改
- 确保
D1:O1是正确的月度名称(Sep到Aug),公式会直接复用这些表头作为Month列的值
内容的提问来源于stack exchange,提问作者Mike W
相关产品推荐
相关产品推荐

