如何在 SQL 中将 CASE 表达式与 SUM 函数一起使用?

Posted

技术标签:

【中文标题】如何在 SQL 中将 CASE 表达式与 SUM 函数一起使用?【英文标题】:How can I use CASE expression with SUM function in SQL? 【发布时间】:2015-02-22 01:28:36 【问题描述】:

我有一个 Oracle SQL 查询,如果基于扣减代码 91B 的保费金额,我需要选择某些扣减代码并提供预定金额。这些是我需要总结的硬编码值。

SELECT SUM(DECODE(DEDCD,'91A',AL_AMOUNT,0)) MED91A,
       SUM(CASE WHEN DEDCD = '91B' THEN 
       DECODE(AL_AMOUNT, 23.54,7.85,
                         40.62,8.31,
                          43.85,8.31,
                          56.77,8.31,
                          AL_AMOUNT)) MED91B
    FROM PS_AL_CHK_DED 
    WHERE WEEK_NBR = 6
    AND TO_CHAR(CHECK_DT, 'YYYY')=TO_CHAR(SYSDATE, 'YYYY')

SUM(DECODE ..) 语句用于总结 dedcd = '91A' 工作正常的值。当我添加部分以汇总 dedcd = '91B' 的值时,它会在解码语句后产生“缺少关键字”错误。我正在尝试简化查询,以便为这两个扣除代码生成我需要的结果,因为完整的查询需要很长时间才能运行。

Oracle Sql Developer 4.0.2.15

【问题讨论】:

【参考方案1】:

您必须使用 END 关键字来完成 case 表达式 语法。

这样做:

DEDCD = '91B' THEN 时的情况 解码(AL_AMOUNT,23.54,7.85, 40.62,8.31, 43.85,8.31, 56.77,8.31, AL_AMOUNT) 结尾

基本的 case 表达式如下所示:

案例[表达式] 当条件_1 那么结果_1 当条件_2 那么结果_2 ... 当条件_n 那么结果_n 其他结果 结尾

有关详细信息,请参阅documentation。

【讨论】:

以上是关于如何在 SQL 中将 CASE 表达式与 SUM 函数一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

SQL基础教程(第2版)第6章 函数谓词CASE表达式:练习题

在 BigQuery 中将两个查询与 case 语句相结合

逗号分隔的结果在 SQL 中使用 SUM(CASE WHEN

带有 CASE 条件和 SUM() 的 SELECT 查询

sum与case连用

如何在 Oracle PL SQL 中将 INTO 与 SELECT AS 一起使用?