如何用SQL CASE表达式计算VA AUM占TOTAL AUM的百分比?
解决方案
你的初始查询返回NULL的核心原因是:逐行计算时,每一行只能匹配PRODUCT='VA'或PRODUCT='TOTAL'中的一个条件,导致分子或分母必然有一个为NULL,最终除法结果为NULL。
正确的思路是先聚合VA和TOTAL的AUM汇总值,再进行除法运算。以下是修正后的SQL:
SELECT MONTHKEY, (SUM(CASE WHEN PRODUCT = 'VA' THEN AUM ELSE 0 END) / NULLIF(SUM(CASE WHEN PRODUCT = 'TOTAL' THEN AUM ELSE 0 END), 0)) * 100 AS [VA % OF BDAUM] FROM #base WHERE AcctType = 'BD AUM' GROUP BY MONTHKEY -- 若存在多个月份,按月份分组计算对应比例
关键说明:
SUM(CASE...)分别累加VA和TOTAL的AUM值,确保得到两个有效的汇总数值,而非逐行的NULLNULLIF函数用于避免分母为0的报错(当TOTAL AUM为0时返回NULL,而非触发除法错误)- 乘以100是为了将结果转换为百分比格式,若不需要百分比可直接移除该乘数
GROUP BY MONTHKEY保证每个月份单独计算比例,若数据仅包含单个月份,可省略该分组语句
如果需要将计算结果与原表数据关联展示,可使用子查询方式:
SELECT b.*, (agg.va_total / NULLIF(agg.total_total, 0)) * 100 AS [VA % OF BDAUM] FROM #base b CROSS JOIN ( SELECT SUM(CASE WHEN PRODUCT = 'VA' THEN AUM ELSE 0 END) AS va_total, SUM(CASE WHEN PRODUCT = 'TOTAL' THEN AUM ELSE 0 END) AS total_total FROM #base WHERE AcctType = 'BD AUM' ) agg WHERE b.AcctType = 'BD AUM'
内容的提问来源于stack exchange,提问作者BIReportGuy
相关产品推荐
相关产品推荐

