Есть ли простой способ распределить значение по нескольким строкам?
Например, моя таблица содержит
Type Invoiced Paid Current Charge 100 0 100 Charge 100 0 100 Charge 100 0 100 Payment 0 250 0 Payment 0 25 0
Данные импортируются таким образом, но мне нужно заполнить столбцы Current
и Paid
тем, чем они должны быть для этой транзакции, на основе платежных транзакций, которые также были импортированы.
Есть ли простой способ написать запрос для определения баланса столбца Current
для каждой записи?
Например, 250 применит 100 к первым двум записям и 50 к следующим двум, а 25 будет применено к последней, поэтому конечный результат после обновления баланса Current
в моей таблице должен быть:
Type Invoiced Paid Current Charge 100 100 0 Charge 100 100 0 Charge 100 75 25 Payment 0 250 0 Payment 0 25 0
В идеале я хотел бы сделать это с помощью одного запроса вместо использования курсора для обработки каждого элемента по отдельности. Я пытался сделать это с помощью функции Row_Number(). и объединение двух подзапросов, но я знаю, что здесь что-то упускаю
Вот моя первая попытка, результатом которой стало получение нарастающей суммы текущего баланса
;with cte(invoiced, paid, current)
as (
select invoiced, paid, current
, row_number() over (order by datecreated)
from mytable
)
select t1.invoiced, t1.paid, sum(t2.invoiced - t2.paid) as [current]
from cte as t1
join cte as t2 on t1.number = t2.number and t2.rownum <= t1.rownum
group by t1.uid, t1.number, t1.rownum
order by t1.rownum
Результат:
Invoiced Paid Current 100 0 100 100 0 200 100 0 300 0 250 50 0 25 25
Я уверен, что есть способ сделать это, но прямо сейчас мой мозг, кажется, бастует и отказывается найти решение.
DateCreated
,AccountId
,TransactionType
и поле идентификатора. Моя цель — заполнить полеCurrent
любым текущим балансом этой транзакции на основе любыхPaid
транзакций. - person Rachel   schedule 06.09.2012Row_Number
выглядит примерно так:row_number() over (partition by AccountId order by DateCreated, Invoiced desc)
. Я просто упростил это ради этого вопроса, так как не думал, что это имеет значение. - person Rachel   schedule 06.09.2012