Сделайте выбор с одним из столбца на основе другого выбора и суммы

Я работаю с windev 17, используя гиперфайл базы данных client / serveur.

У меня есть таблица с именем Операции со столбцами (accountNumber, дата, сумма, operationType).

OperationType может принимать два значения: "оплата" и "снятие".

Я хочу выбрать Список операций, выполненных в учетной записи, и в моем Списке должно отображаться 5 столбцов: Дата, номер счета, сумма, тип операции и баланс.

В последнем столбце (сальдо) должна быть разница между суммой всех операций, выполненных до текущей даты с типом "оплата", и суммой всех операций, выполненных до текущей даты с типом "снятие"

Я пытаюсь следующий код SQL

SELECT date, accountNumber, operationType, deposits - withdrawals AS balance
FROM Operations o INNER JOIN (
     SELECT accountNumber, date, SUM(amount) AS withdrawals
     FROM Operaions
     WHERE operationType = 'withdrawal'
     GROUP BY accountNumber
) a ON  (o.accountNumber = a.accountNumber AND a.date<=o.date)
INNER JOIN (
     SELECT accountNumber,date, SUM(amount) AS deposits
     FROM Operations
     WHERE operationType = 'deposit'
     GROUP BY accountNumber
)b ON (o.accountNumber = b.accountNumber AND b.date<=o.date)

но запрос не отображает никакого значения.

Я тоже попробовал этот

 SELECT date as dateop, accountNumber, operationType, deposits - withdrawals AS balance
FROM Operations o INNER JOIN (
     SELECT accountNumber, date, SUM(amount) AS withdrawals
     FROM Operaions
     WHERE operationType = 'withdrawal' AND date<=dateop
     GROUP BY accountNumber
) a ON  o.accountNumber = a.accountNumber
INNER JOIN (
     SELECT accountNumber,date, SUM(amount) AS deposits
     FROM Operations
     WHERE operationType = 'deposit' AND date<=dateop
     GROUP BY accountNumber
)b ON o.accountNumber = b.accountNumber

но я получаю сообщение об ошибке, сообщающее, что столбец dateop не существует.

пожалуйста, мне нужна помощь

1 ответ

Вот, пожалуйста, мой мужчина.

select accountNumber, dateField, sum(isnull(deposits,0)) - sum(isnull(withdrawals,0)) from (
select accountNumber, operationType, dateField, 
case when operationType = 'deposit' then sum(sum(amount)) over (partition by accountNumber, operationType order by dateField asc) else null end deposits,
case when operationType = 'withdrawal' then sum(sum(amount)) over (partition by accountNumber, operationType order by dateField asc) else null end withdrawals
from operations a
group by accountNumber, operationType, dateField
) a group by accountNumber, dateField
Другие вопросы по тегам