如何用Google Sheets QUERY函数按年份拆分营收数据
解决按年份拆分月度营收的需求
我来帮你实现这个把单列年份营收拆分成多列的需求,刚好两种方法都能满足你的要求,咱们一个个说:
方法1:用QUERY的PIVOT功能(自动适配年份)
如果你不确定未来会不会新增年份,这个方法更灵活,会自动把所有出现的年份转成独立列:
假设你的原始数据在A1:E5(包含表头),直接用下面的公式:
=ARRAYFORMULA(IF(QUERY(A1:E5, "SELECT A,B,C,SUM(E) WHERE A IS NOT NULL GROUP BY A,B,C PIVOT D", 1)="", 0, QUERY(A1:E5, "SELECT A,B,C,SUM(E) WHERE A IS NOT NULL GROUP BY A,B,C PIVOT D", 1)))
公式拆解:
QUERY(...) PIVOT D:核心逻辑是用PIVOT把Year列(D列)的不同取值转成单独的列,同时按Client, Source, Month分组求和对应营收ARRAYFORMULA(IF(...="", 0, ...)):把QUERY返回的空值(对应某分组没有该年份营收的情况)替换成0,完美匹配你想要的输出格式
方法2:用CASE WHEN逻辑(手动指定年份,贴合你的伪代码)
如果只需要固定拆分2018和2019这两个年份,这个方法更直观,完全对应你写的伪代码思路:
=QUERY(A1:E5, "SELECT A,B,C, SUM(IF(D=2018, E, 0)) AS '2018 Revenue', SUM(IF(D=2019, E, 0)) AS '2019 Revenue' WHERE A IS NOT NULL GROUP BY A,B,C", 1)
公式拆解:
SUM(IF(D=2018, E, 0)) AS '2018 Revenue':判断当前行年份是否为2018,是就取对应营收值,否则取0,最后求和得到该分组的2018总营收,同时给列命名GROUP BY A,B,C:按客户、来源、月份分组,确保每一行都是唯一的组合- 这个公式直接就能输出你期望的格式,没有对应年份数据的单元格会自动显示0
两种方法都能得到你想要的结果,你可以根据实际需求选择~
内容的提问来源于stack exchange,提问作者Abhay
相关产品推荐
相关产品推荐

