update tbl_point_bidder bidder 
set point=(select SUM(pt.point)/SUM(DECODE(POINT_STATUS,0,0,1)
             from tbl_point_bidder pt 
                               where pt.project_id =221 
                                 and pt.expert_idcard not in ('0','-1','-3') 
                                 and pt.organ_id = bidder.organ_id 
                                 and pt.index_id = bidder.index_id 
                                group by bidder.organ_id) 
where project_id =221 and expert_idcard = '-1'  

解决方案 »

  1.   

    你这样的语句能在oracle中执行?
    好像是sql server的语法啊
      

  2.   

    csqno1(朱茵追我整條街) 
    你的语句我试过了,不行的!!!
      

  3.   

    avg函数好像只计算非空列的吧
    col
    1
    2
    null
    null
    3这里avg(col)的值是2,而不是6/5=1.2
      

  4.   

    我的意思是如果有空值,就不计算INDEX_ID一样的平均值!!!
      

  5.   

    加上过滤条件:and point is not null
      

  6.   

    try:
    ...
    group by bidder.organ_id having count(*)<>count(index_id)
    ...
      

  7.   

    加过滤条件
    update tbl_point_bidder bidder set point=(select avg(pt.point) from tbl_point_bidder pt where pt.project_id =221 and pt.expert_idcard not in ('0','-1','-3') and pt.organ_id = bidder.organ_id and pt.index_id = bidder.index_id and pt.point is not null
     group by bidder.organ_id) where project_id =221 and expert_idcard = '-1'  
    这个语句我试过了,结果还是不对,
      

  8.   

    update tbl_point_bidder bidder 
    set point=(select avg(pt.point) from tbl_point_bidder pt 
         where pt.project_id =221 
         and pt.expert_idcard not in ('0','-1','-3') 
         and pt.organ_id = bidder.organ_id 
         and pt.index_id = bidder.index_id 
         group by bidder.organ_id ---这里是不是应该pt.organ_id ?
         having count(*) = count(point) ---加这一句

    where project_id =221 and expert_idcard = '-1'