2013-04-17 1 views
2

Привет Пожалуйста, помогите мне мне нужно просуммировать значения, а затем Минус кредитные и дебетовые Примечание в Oracle 9iнужно просуммировать значения, а затем Минус кредитные и дебетовые Примечание в Oracle

ID Acc_TYP  Amt 


1  CR   100 
2  CR   200 
3  DB   50 
4  DB   50 

Используя приведенную выше таблицу структуры , Мне нужно вычислить баланс (CR-DB), как сформировать логику
в одном запросе, пожалуйста, помогите мне решить проблему, я очень новичок в oracle. Спасибо заранее

+1

У вас есть d написать sql для этого? Это довольно легко. Подсказка: используйте конструкцию _case when_. –

ответ

-1

Попробуйте это:

select sum(n) from (
(select sum(amt) as n from table where acc_typ='CR') 
union 
(select -sum(amt) as n from table where acc_typ='DB') 
) 
+0

-1 для неэффективности и возможность неправильного ответа, когда сумма кредитов равна минус дебетовых сумм из-за неявного выделения в UNION. –

+0

@ DavidAldridge Ухаживать за разработкой? Как это решение вернет неправильный ответ, если сумма кредитов и дебетов равна (какой AFAICT может произойти только в том случае, если обе суммы возвращают 0, если мы не допустим отрицательных сумм)? –

+0

Нет ничего, что могло бы предложить (в вопросе или в принципах бухгалтерского учета), что отрицательные суммы запрещены. Во всяком случае, если сумма (amt) для кредитов равна «10», а сумма (ам) для дебетов - «-10», то -sum (amt) для дебетов будет «10». Добавление этих должно дать «20», но UNION устранит один из «10», а ответ будет «10» вместо правильного «20». http://sqlfiddle.com/#!4/72810/11 –

2
select sum(
     case 
      when acc_typ='CR' then amt 
      when acc_typ='DB' then -amt 
      else 0 
     end) as balance 
from the_table 
where acc_typ in ('CR', 'DB'); 
+0

Hi IT работал хорошо, спасибо тонну !!! – Sajini

1

Вы должны использовать саз:

select sum(case when Acc_TYP='DB' 
       then -amt 
       else amt 
      end) from t 
+0

Спасибо за решение – Sajini

 Смежные вопросы

  • Нет связанных вопросов^_^