sql промежуточная сумма для баланса счета

Я пытаюсь подготовить отчет о представлении вспомогательной бухгалтерской книги в SQL2008. Вот временная таблица

AccountCode |Date       |Fiche Type      |Debit    |Credit  |Balance
100.001.001 |1.1.2015   |Açılış Fişi     |1856,09  |0       |1856,09
100.001.002 |1.1.2015   |Mahsup Fişi     |0        |20      |-20
100.001.001 |1.2.2015   |Tediye Fişi     |0        |950     |906,09
100.001.002 |1.2.2015   |Açılış Fişi     |2931,37  |0       |2911,37
100.001.001 |1.4.2015   |Mahsup Fişi     |0        |6,25    |899,84
100.001.002 |1.6.2015   |Tahsil Fişi     |0        |400     |2511,37
100.002.001 |1.7.2015   |Açılış Fişi     |0        |1969,5  |-1969,5
100.002.001 |1.20.2015  |Mahsup Fişi     |217,6    |0       |-1751,9
100.001.001 |1.21.2015  |Mahsup Fişi     |500      |0       |1399,84
100.002.001 |1.21.2015  |Tediye Fişi     |2000     |0       |248,1
100.001.002 |1.21.2015  |Tahsil Fişi     |543,34   |0       |3054,7

В последнем столбце я пытаюсь рассчитать баланс для кода счета в первом столбце. Формула для поля баланса просто (Дебет-Кредит). Отчет должен быть упорядочен по дате. Так, например, в 3-й строке, поскольку коды счетов одинаковы, поле баланса должно принимать значения первых столбцов и объединять их со значениями 3-го столбца (Row1 (дебет-кредит) + Row3 (дебет-кредит)).

Я пробовал много вещей, но безуспешно, поскольку список не упорядочен по критериям, на которых основывается промежуточная сумма.

Может ли кто-нибудь предложить мне решение?


person Orkun Antmen    schedule 22.05.2015    source источник
comment
не могли бы вы показать свой запрос?   -  person The Reason    schedule 22.05.2015
comment
Я пробовал много, это один из них: SELECT tmu.Accountcode, tmu.date, tmu.[Fiche Type], tmu.debit, tmu.credit, ( SELECT SUM(balance) from tempMuavin mua WHERE convert(char(10),tmu.Tarih,101)=convert(char(10),mua.tarih,101)) FROM tempMuavin tmu ORDER BY date Он создал столбец с некоторыми странными значениями, например: 4,36557456851006E-11-5,18980414199177E-11-7,82165443524718E-11 -   -  person Orkun Antmen    schedule 22.05.2015


Ответы (2)


    with x as 
    (
      select *,row_number() over (partition by accountcode order by date) sr 
      from ledger

    )
    select 
      (select sum(debit-credit) from x y where y.accountcode=x.accountcode and y.sr<x.sr) opening
      ,*
      ,(select sum(debit-credit) from x y where y.accountcode=x.accountcode and y.sr<=x.sr) closing
    from x

см. в SQL Fiddle здесь

HTH

person Community    schedule 22.05.2015
comment
Это привело к появлению 3 дополнительных столбцов ниже; | Открытие | Закрытие | SrNo | NULL | -9,09640220925212E-08 | 1 - person Orkun Antmen; 22.05.2015

В SQL Server 2012+ для этого можно использовать совокупную сумму. В SQL Server 2008 вы можете использовать коррелированный подзапрос, присоединиться или применить. Вот последний:

select l.*, cume.balance
from ledger l cross apply
     (select sum(debit - credit) as balance
      from ledger l2
      where l2.AccountCode = l.AccountCode and
            l2.date <= l.date
     ) cume;
person Gordon Linoff    schedule 22.05.2015
comment
Я попробовал это, он дал мне общую сумму конкретной учетной записи. - person Orkun Antmen; 22.05.2015
comment
@OrkunAntmen. . . Сначала я не мог понять, как это могло быть. Но условие where было l2.date <= date, а не l2.date <= l.date (теперь исправлено). Первая версия была тавтологией, интерпретируемой как l2.date <= l2.date из-за правил определения объема. Всегда уточняйте столбцы. - person Gordon Linoff; 22.05.2015
comment
Думаю, ты почти у цели, Гордон. У меня есть таблица ниже: ссылка Я думаю, что могу попробовать добавить критерии логической ссылки (первичный ключ) из таблицы строк фиши, потому что она автоматически добавляет сумму за день, что очень логично для запроса. Большое Вам спасибо. - person Orkun Antmen; 22.05.2015
comment
Или лучше добавить столбец первичного ключа в временную таблицу, как предложил Митан, и включить этот столбец в предложение Where. - person Orkun Antmen; 22.05.2015