Автор: Artix (user.su) Задачка: Есть таблица, в которой заведены платежи двух типов: 1) аванс (один где-то в начале) и 2) погашение (много) Нужно построить таблицу, отсортированную по дате, в которую добавить столбец "Баланс", который будет уменьшаться по мере погашения аванса. Решение: Исходная табличка с данными: SELECT PAY_DATE, PAY_PAYTYPE, PAY_SUM FROM PAYMENTS Промежуточная табличка с балансом SELECT PAY_DATE, IIF(PAY_PAYTYPE=1,PAY_SUM,0) as AVANS, IIF(PAY_PAYTYPE<>1,PAY_SUM,0) as SPISANIE, IIF(PAY_PAYTYPE=1,PAY_SUM,0)-IIF(PAY_PAYTYPE<>1,PAY_SUM,0) as BALANCE FROM PAYMENTS ORDER BY PAY_DATE Результат (из промежуточной таблички берем стартовый баланс и спускаемся со смещением с помощью оконной функции): SELECT COALESCE(LAG(START_BALANCE) OVER (ORDER BY PAY_DATE),0) - SPISANIE + AVANS AS BALANCE, T.* FROM ( SELECT PAY_DATE, IIF(PAY_PAYTYPE=1,PAY_SUM,0) as AVANS, IIF(PAY_PAYTYPE<>1,PAY_SUM,0) as SPISANIE, IIF(PAY_PAYTYPE=1,PAY_SUM,0)-IIF(PAY_PAYTYPE<>1,PAY_SUM,0) as START_BALANCE FROM PAYMENTS ORDER BY PAY_DATE ) T #
SQL Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor