日期:2014-05-17  浏览次数:20896 次

聚集函数里case的改变
case 嵌套在sum里怎么获得返回值给sum 呢
我觉得这实现不了所想要的功能
如果想计算d.value+(-d.value)在查询里 该怎么实现呢 


SELECT 
SUM(CASE WHEN   d.OperateType = 1 
            AND  d.ReviewFlag = 1 
            AND  h.OffsetFlag = 0  
            AND  d.FundType = 2 
          THEN  d.Value      --入金,已经复核的,未冲销的,支票
          WHEN  d.OperateType = 2 
            AND  d.ReviewFlag = 1 
            AND  h.OffsetFlag = 0  
            AND  d.FundType = 2 
          THEN -d.Value      --出金,已经复核的,未冲销的,支票
          ELSE  0 
          END;
           ) sValue
FROM ...

------最佳解决方案--------------------
例子。
with test AS (
select 10 AS c1 ,'A' AS c2 FROM DUAL
UNION ALL
select 20 AS c1 ,'A' AS c2 FROM DUAL
UNION ALL
select 30 AS c1 ,'B' AS c2 FROM DUAL
UNION ALL
select 40 AS c1 ,'A' AS c2 FROM DUAL
UNION ALL
select 50 AS c1 ,'A' AS c2 FROM DUAL
)
 SELECT SUM(CASE
              WHEN c2 = 'A' THEN
               c1
              WHEN c2 = 'B' THEN
               -c1
              ELSE
               0
            END) AS TT
   FROM TEST
===============
1 90
===============
你的应该可以。