Oracle Case语句

来源:互联网 发布:阿里云ubuntu饥荒联机 编辑:程序博客网 时间:2024/06/05 07:48
今天看了一下Case语句,蛮有用的,比decode强大.
----基金净值比例
SELECT fnwd.CALCULATE_DATE,COUNT (CASE
                 WHEN fnwd.NET_WORTH < 1
                    THEN 1
              END) 小于1,
       COUNT (CASE
                 WHEN fnwd.NET_WORTH < 2 AND fnwd.NET_WORTH >= 1
                    THEN 1
              END
             ) 小于2大于等于1,
       COUNT (CASE
                 WHEN fnwd.NET_WORTH < 3 AND fnwd.NET_WORTH >= 2
                    THEN 1
              END
             ) 小于3大于等于2,
       COUNT (CASE
                 WHEN fnwd.NET_WORTH < 4 AND fnwd.NET_WORTH >= 3
                    THEN 1
              END
             ) 小于4大于等于3,
       COUNT (CASE
                 WHEN fnwd.NET_WORTH < 5 AND fnwd.NET_WORTH >= 4
                    THEN 1
              END
             ) 小于5大于等于4,
       COUNT (CASE
                 WHEN fnwd.NET_WORTH >= 5
                    THEN 1
              END) 大于等于5
  FROM T_FUND_NET_WORTH_DAILY fnwd
  where fnwd.CALCULATE_DATE between TO_DATE ('2007-05-31', 'YYYY-MM-DD') and TO_DATE ('2007-07-03', 'YYYY-MM-DD')
  group by fnwd.CALCULATE_DATE
 
case语句还可以嵌套
select (case when qty_less6months < 0 and qty_6to12months < 0 then
                            (case when season_code in ('0', '1', '2', '3', '4') then 'value is negative'
                                  else 'No stock'
                             end)
             when qty_1to2years < 0 and qty_2to3years < 0 then
                            (case when season_code in ('A', 'B', 'C', 'D', 'E') then 'value is negative'
                                  else 'No stock'
                             end)
             else 'Stock Available'
        end) stock_check
from   jnc_lots_ageing_mexx_asof
where  rownum < 20
and    qty_less6months < 0 and qty_6to12months < 0