如何在SQL中使用带有SUM函数的CASE表达式?

时间:2015-02-22 01:28:37

标签: sql oracle oracle11g case

我有一个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 个答案:

答案 0 :(得分:1)

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

这样做:

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)
END

基本案例表达式如下:

CASE [ expression ]

   WHEN condition_1 THEN result_1
   WHEN condition_2 THEN result_2
   ...
   WHEN condition_n THEN result_n

   ELSE result

END

有关详细信息,请参阅documentation