能否在单个Google BigQuery SQL查询中按条件生成多列?
单个SQL查询实现按客户、月份、财年拆分产品与服务销售额
完全可以在单个查询中实现这个需求,核心思路是利用CASE WHEN条件判断配合聚合函数SUM(),在同一分组维度下分别计算产品和服务的销售额。
以下是完整的SQL示例:
SELECT cust_no, month, year AS fiscal_year, SUM(amount) AS totalAmt, -- 计算产品销售额(item_no非空) SUM(CASE WHEN item_no IS NOT NULL THEN amount ELSE 0 END) AS product_amt, -- 计算服务销售额(item_no为空) SUM(CASE WHEN item_no IS NULL THEN amount ELSE 0 END) AS service_amt FROM sales_detail GROUP BY cust_no, month, year ORDER BY cust_no, fiscal_year, month;
关键说明:
CASE WHEN会根据item_no是否为空的条件,筛选出对应类型的金额进行求和,不满足条件的金额会被替换为0,不影响最终聚合结果GROUP BY子句保持你需要的分组维度(客户、月份、财年),确保汇总数据的粒度符合要求- 同时保留了总销售额
totalAmt,与拆分后的产品、服务销售额逻辑一致
如果你的财年逻辑不是直接使用year字段(比如跨自然年的财年规则),只需要调整GROUP BY和SELECT中对应的财年计算逻辑即可,核心的拆分方法保持不变。
内容的提问来源于stack exchange,提问作者Edward Wu
相关产品推荐
相关产品推荐

