2014-04-17 3 views
1

я еще новичок в SQL, я нужна ваша помощь, у меня есть таблица, которые выглядят как этотSQL запрос для запуска баланса

 
ses_date   trx_no  amount 
02-04-2014  27487776I  1000 
03-05-2014  27485776Y  -500 
01-02-2014  65474645H  4500 
09-01-2014  65474656D  -3400 

и я нужен выход, как этот

 
ses_date  trx_no  amount Debit  Credit  Balance 
02-04-2014  27487776I  1000  0.00  1000.00  1000 
03-05-2014  27485776Y  -500 -500  0.00   500 
01-02-2014  65474645H  4500 0.00  4500.00  5000 
09-01-2014  65474656D  -3400 -3400.00 0.00   1600 

точно так же, как отчет о счете, но в моем случае я не имею дебетов и кредитов отдельно, они вместе.

Большое спасибо за вашу помощь и поддержку, вы лучшие. моя СУБД Microsoft SQL Server 2008. Я пытаюсь использовать этот запрос

SELECT ses_date, trx_no, amount, 
    CASE WHEN amount<0 THEN amount ELSE 0 END debit, 
    CASE WHEN amount>0 THEN amount ELSE 0 END credit, 
    (SELECT SUM(amount) FROM mytable a WHERE a.ses_date<=mytable.ses_date) balance 
FROM mytable 
ORDER BY ses_date; 

, но это дает (0.00) в колонке баланса ZERO все через, но дебет и кредит в порядке. что мне делать.

и когда я использую второй запрос

select ses_date, 
     trx_no, 
     amount, 
     case 
      when amount < 0 then amount 
      else 0 
     end as debit, 
     case 
      when amount >= 0 then amount 
      else 0 
     end as credit, 
     sum(amount) over (order by ses_date) as balance 
from the_table 
order by ses_date 

ошибка

Msg 102, Level 15, State 1, Line 12 Неправильный синтаксис около 'порядок'.

что я буду делать

+3

Что вы используете? – wvdz

+1

Что вы заказываете? Даты не в любом порядке, я вижу ...? –

+0

SQL Server 2008 не поддерживает функции 'order by' для окон. Но ваше другое решение действительно работает для моего примера: http://sqlfiddle.com/#!15/c552e/3 –

ответ

5

Вы не указали свои СУБД, так что это ANSI SQL

select ses_date, 
     trx_no, 
     amount, 
     case 
      when amount < 0 then amount 
      else 0 
     end as debit, 
     case 
      when amount >= 0 then amount 
      else 0 
     end as credit, 
     sum(amount) over (order by ses_date) as balance 
from the_table 
order by ses_date 

SQLFiddle пример: http://sqlfiddle.com/#!15/c552e/1

0

Просто для полноты, так как MySQL не очень ... ANSI, вот версия MySQL, которая заказывает ses_date;

SELECT ses_date, trx_no, amount, 
    CASE WHEN amount<0 THEN amount ELSE 0 END debit, 
    CASE WHEN amount>0 THEN amount ELSE 0 END credit, 
    (SELECT SUM(amount) FROM mytable a WHERE a.ses_date<=mytable.ses_date) balance 
FROM mytable 
ORDER BY ses_date; 

An SQLfiddle to test with.

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