select region_code city_code ,  
sum(decode(sale_type,0,1,0)*decode(brand_code,10002,1,0)*decode(type_code,10044,1,0)*decode(unit_price,600,1,0)) a_1
from tb_rpt group by region_code
做了一个统计,但是sum之后只取到了sale_type,brand_code,type_code,unit_price对应的个数,我想取的是上面四个条件所对应表里的另一个字段的合计,各位给个意见

解决方案 »

  1.   

    sum(decode(sale_type,0,1,0) 肯定就是个数了。
    sum(decode(sale_type,0,sale_type,null)) 才是求和。
      

  2.   

    sum(decode(sale_type,0,sale_type,null))结果是0或null
    sum(decode(sale_type,0,1,0)是对sale_type=0的个数的计算
    两种都会造成整个算式为0的楼主的条件还是有点点奇怪,
    楼主所写的语句是:
    当sale_type=0 返回1,否则返回0
    当brand_code=10002返回1 否则返回0
    当type_code=10044返回1,否则返回0
    当unit_price=600返回1,否则返回0
    然后将上面的所有的1或0相乘,结果只能是1或是0
    然后再将1或0相加。
    感觉逻缉很混乱,不清楚楼主到底是要什么
    decode的用法是
    decode(a,b,c,d)  如果a=b 则返回c 否则返回d 
      

  3.   

    2,3楼的说法都有点问题。
    “sum(decode(sale_type,0,sale_type,null)) 才是求和。”应该为
    sum(decode(sale_type,0,your_sum_field,0))不然有null相加的话一定会为null,除非每个sale_type为0。楼上认为是先*后SUM也是错误的。
    它是对每块的SUM后才相乘的。