#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
У меня есть таблица главной книги, смотрите изображение
Я хочу написать запрос, который будет вычитать данные DR-CR .. и повторно запрашивать только данные о количестве.
следует исключить оплаченную сумму 5000, потому что у нас есть 2000 на 1-3-2014 и 3000 на 1-4-2014
не могли бы вы, пожалуйста, помочь… Я сделал это в приложении. Но я хочу сделать это в своем SQL-запросе.
Комментарии:
1. Почему бы не опустить два
$1000
значения вместо одного$2000
? Любой из них в сочетании с$3000
будет$5000
2. Потому что это вычисление в бухгалтерской книге. когда кто-то заплатит, он сначала скорректируется с учетом просроченной задолженности … вот почему 2000 и 3000 опущены
3. Разве не должно быть поля для указания учетной записи или чего-то подобного? Кроме того, что, если платеж составил 1000? Каким тогда будет желаемый результат?
4. Мой вопрос в том, как вы определяете, что собираетесь использовать 2000 долларов вместо двух сумм в 1000 долларов? Я уверен, что это имеет смысл для вас, но вы не указали нам, как принимается это решение
5. @AbeMiessler, решение принимается путем перехода в порядке возрастания дат. По крайней мере, так я воспринял его ответ. Однако на вопрос Дэна все еще нужно ответить.
Ответ №1:
В SQL Server 2008 нет кумулятивной суммы. Итак, вам придется использовать более сложные выражения. Идея состоит в том, чтобы взять совокупную сумму DR, затем вычесть сумму кредита и выбрать строки, где значение положительное.
select l.*
from (select l.*,
(select sum(dr)
from ledger l2
where l2.id <= l.id
) as cumdr,
sum(cr) over () as sumcr
from ledger l
) l
where cumdr - sumcr > 0;