У меня есть поле, которое служит промежуточной суммой (Фактический конечный баланс). Теперь мне нужно поле, которое делает то же самое, но возвращает значение предыдущей строки. Вот мой запрос:
select
convert(date,c.TRANSDATE) as Transdate,
sum(sum(case when c.LEDGERACCOUNT like '113120%' and (c.VOUCHER like 'civ%' or c.VOUCHER like
'cnv%' or c.VOUCHER like 'wo%' or c.VOUCHER like 'fti%' or c.VOUCHER like 'fcr%' or c.VOUCHER like
'arp%' or c.VOUCHER like 'arr%' or c.VOUCHER like 'arm%' or c.VOUCHER like 'aro%')
then convert(decimal(10,2),c.AMOUNTMST) else 0 end)) over (order by c.transdate) as 'Actual
Ending Balance'
from AX2cTest.[dbo].CUSTTRANS_V c
group by c.TRANSDATE
Это пример данных с нужным мне столбцом (Начальный баланс):
Transdate Beginning Balance Actual Ending Balance
4/12/2019 null -50129.26
4/15/2019 -50129.26 -50524.21
4/25/2019 -50524.21 -52300.21
Я столкнулся с ошибками при попытке использовать функцию LAG для решения эта проблема:
select
convert(date,c.TRANSDATE) as Transdate,
lag(sum(sum(case when c.LEDGERACCOUNT like '113120%' and (c.VOUCHER like 'civ%' or c.VOUCHER like
'cnv%' or c.VOUCHER like 'wo%' or c.VOUCHER like 'fti%' or c.VOUCHER like 'fcr%' or c.VOUCHER
like 'arp%' or c.VOUCHER like 'arr%' or c.VOUCHER like 'arm%' or c.VOUCHER like 'aro%')
then convert(decimal(10,2),c.AMOUNTMST) else 0 end)) over (order by c.transdate)) over (order by
c.transdate) as 'Beginning Balance',
sum(sum(case when c.LEDGERACCOUNT like '113120%' and (c.VOUCHER like 'civ%' or c.VOUCHER like
'cnv%'or c.VOUCHER like 'wo%' or c.VOUCHER like 'fti%' or c.VOUCHER like 'fcr%' or c.VOUCHER like
'arp%' or c.VOUCHER like 'arr%' or c.VOUCHER like 'arm%' or c.VOUCHER like 'aro%') then
convert(decimal(10,2),c.AMOUNTMST) else 0 end)) over (order by c.transdate) as 'Actual Ending
Balance'
from AX2cTest.[dbo].CUSTTRANS_V c
group by c.TRANSDATE
Ошибка:
Оконные функции не могут использоваться в контексте другой оконной функции или агрегата
Не уверен, как решить эту проблему или может есть альтернатива? Спасибо
Моя последняя попытка:
select
convert(date,c.TRANSDATE) as Transdate,
lag(sum(sum(case when c.LEDGERACCOUNT like '113120%' and (c.VOUCHER like 'civ%' or c.VOUCHER like 'cnv%' or c.VOUCHER like 'wo%' or c.VOUCHER like 'fti%' or c.VOUCHER like 'fcr%' or c.VOUCHER like 'arp%' or c.VOUCHER like 'arr%' or c.VOUCHER like 'arm%' or c.VOUCHER like 'aro%')
then convert(decimal(10,2),c.AMOUNTMST) else 0 end)) over (order by c.transdate)) over (order by c.transdate rows between unbounded preceding and 1 preceding) as 'Beginning Balance',
sum(sum(case when c.LEDGERACCOUNT like '113120%' and (c.VOUCHER like 'civ%' or c.VOUCHER like 'cnv%' or c.VOUCHER like 'wo%' or c.VOUCHER like 'fti%' or c.VOUCHER like 'fcr%' or c.VOUCHER like 'arp%' or c.VOUCHER like 'arr%' or c.VOUCHER like 'arm%' or c.VOUCHER like 'aro%')
then convert(decimal(10,2),c.AMOUNTMST) else 0 end)) over (order by c.transdate) as 'Actual Ending Balance'
from AX2cTest.[dbo].CUSTTRANS_V c
group by c.TRANSDATE
ошибка: функция «задержка» может не иметь рамки окна.