基于财年财期关联预算与销售:带聚合的CASE语句问题
解决预算表按特定GL账户汇总的SQL问题
场景1:只统计特定GL账户的预算总额
如果仅需汇总指定GL_ACCOUNT_NUMBER的预算,直接在WHERE子句中过滤即可,这种方式执行效率更高:
SELECT BRANCH_ID, BRANCH_NAME, FISCAL_YEAR, FISCAL_PERIOD, SUM(GL_BUDGET) AS BUDGET_TOTAL FROM connection.subsection.FACT_BRANCH_BUDGET WHERE FISCAL_YEAR = '2022' -- 替换成你需要的具体GL账户编码,多个用IN,单个用= AND GL_ACCOUNT_NUMBER IN ('1001', '2002') GROUP BY BRANCH_ID, BRANCH_NAME, FISCAL_YEAR, FISCAL_PERIOD ORDER BY BRANCH_ID, BRANCH_NAME, FISCAL_YEAR, FISCAL_PERIOD
场景2:需区分特定账户与其他账户的汇总
如果要在同一结果中仅统计特定账户的预算(其他账户不计入或归为0),把CASE语句嵌套在SUM函数里即可:
SELECT BRANCH_ID, BRANCH_NAME, FISCAL_YEAR, FISCAL_PERIOD, SUM(CASE WHEN GL_ACCOUNT_NUMBER = '3003' THEN GL_BUDGET ELSE 0 -- 不需要统计的账户填0,或者用NULL表示无数据 END) AS TARGET_ACCOUNT_BUDGET FROM connection.subsection.FACT_BRANCH_BUDGET WHERE FISCAL_YEAR = '2022' GROUP BY BRANCH_ID, BRANCH_NAME, FISCAL_YEAR, FISCAL_PERIOD ORDER BY BRANCH_ID, BRANCH_NAME, FISCAL_YEAR, FISCAL_PERIOD
常见报错原因
- 之前可能把
CASE放在SELECT里但未嵌套进聚合函数,导致分组逻辑冲突(非聚合字段未出现在GROUP BY中) - 检查
CASE语法:必须写全WHEN ... THEN ... ELSE ... END结构,不能遗漏关键字 - 注意
GL_ACCOUNT_NUMBER的类型:如果是数值型,不要加单引号,避免类型不匹配报错
内容的提问来源于stack exchange,提问作者DevDuff
相关产品推荐
相关产品推荐

