在查询的时候我用
select t.id,(case t.people_sum when null then 0 when 0 then 0 else nvl(t.execmoney,0)/t.people_sum end) as "人均金额" from myTable .查出来后人均金额竟然还有为空的,这是为什么呢,正常的话应该没有为空才对吧,因为我已经用case把people_sum为空设成了0,又用nvl(t.execmoney,0)把execmoney也设成了0。可怎么还有空的呢,难道与case的执行顺序有关么?

解决方案 »

  1.   

    因为t.people_sum有为0的情况,如果为0不能做除数,所以为空,你去掉t.people_sum,就知道了
      

  2.   

    上面说错了
    因为t.people_sum有为null的情况,如果null做除数,所以为空,你去掉t.people_sum,就知道了
      

  3.   

    你可以在t.people_sum 在用一次case 
      

  4.   

    when null then 0?这样也行?这句不起作用,用decode
      

  5.   

    select t.id,
       (case
           when people_sum>0 then nvl(t.execmoney,0)/t.people_sum
           else 0
        end) as "人均金额"
    from myTable;
      

  6.   

    nvl(t.execmoney,0)/t.people_sum
    你的除数为0啊,这个语句有问题吧,实在要这样就试试
    下面这个
    select t.id,
    nvl(t.execmoney,0)/nvl(t.people_sum,0) as "人均金额" 
    from myTable . 
      

  7.   

    SELECT T.ID ,NVL((NVL(T.EXECMONEY,0)/T.PEOPLE_SUM),0) AS AVG_MONEY
    FROM MYTABLE;
      

  8.   

    换个写法:
    select t.id,decode(t.people_sum,0,0,null,0,nvl(t.execmoney,0)/t.people_sum) as "人均金额" from myTable t
      

  9.   

    select t.id,(case when trim(t.people_sum) <> 0 then nvl(t.execmoney,0)/t.people_sum else 0 end) from myTable t
      

  10.   

    SELECT T.ID ,
    (CASE T.PEOPLE_SUM WHEN 0 THEN 0
    ELSE NVL((NVL(T.EXECMONEY,0)/T.PEOPLE_SUM),0))
    "人均金额" from myTable;
      

  11.   

    --when null 有问题,改一下
    SELECT t.id,
           (CASE
             WHEN t.people_sum IS NULL THEN
              0
             WHEN t.people_sum = 0 THEN
              0
             ELSE
              nvl(t.execmoney, 0) / t.people_sum
           END) AS "人均金额"
      FROM myTable