Оператор case для оптимизации SQL

Думаю, я смогу оптимизировать этот оператор sql, используя оператор case для левого внешнего соединения.

Но мне было трудно настроить случаи, один для суммирования типов кодов AB, CD и другой для всех остальных.

Буду признателен за любую помощь или советы, которые вы можете мне дать по этому поводу.

update billing set payments = isnull(bd1.amount, payments)
, payments = case 
       when payments is null then 0 
       else payments 
     end
, charges = case 
        when bd2.amount is not null then charges 
        when charges is null then 0 
        else charges 
      end
, balance = round(charges + isnull(bd1.amount, bi.payments), 2) 
from billing bi 

left outer join (select inv, round(sum(bd1.bal), 2) amount 
                from "bill" bd1 
                where code_type = 'AB'
                 or code_type = 'CD' 
                group by inv) bd1 
                on bd1.inv = bi.inv 
left outer join (select invoice, round(sum(bd2.bal), 2) amount 
                from "bill" bd2 
                where code_type <> 'AB'
                 and code_type <> 'CD' 
                group by inv) bd2 
                on bd2.inv = bi.inv;
6
задан APC 1 May 2012 в 14:50
поделиться