Две таблицы: «S» (для «Услуги») и «Платежи». Они связаны друг с другом через «S». «ID-S» ссылается как внешний ключ: «Платежи». «S».
Я пытаюсь создать запрос для выпадающего списка в форме «добавить платеж», но, поскольку я надеюсь разрешить частичные платежи, я хочу вычесть сумму уже выполненных платежей, которые связаны с данным "ID-S". Однако я не могу скрыть услуги, оплаченные несколькими платежами.
Ниже приведен мой текущий код, использующий только одну из категорий «услуг» (в данном случае счета):
SELECT "S"."Invoice" || ' for $' || "S"."Price" -
IIF("Payments"."S" IS NULL, 0, SUM("Payments"."Amount")
AS "To-Pay", "ID-S"
FROM "S"
LEFT OUTER JOIN "Payments" ON "S"."ID-S" = "Payments"."S"
GROUP BY "S"."Invoice", "S"."Price", "Payments"."Amount", "Payments"."S", "S"."ID-S"
HAVING "Payments"."S" IS NULL OR
SUM("Payments"."Amount") < "S"."Price"
Это должно показать, например:
- 1/1/2018 за 400 * 1011 $
- 2/1/2018 за 1050 $
- 6/8/2018 за 750 * 1015 $
и т. Д., Цена - оставшаяся цена Он вообще не должен показывать полностью оплаченные счета.
Насколько я могу судить, проблема в том, что SUM("Payments"."Amount")
не суммирует все столбцы «Сумма» с совпадающим «S-ID», он только берет «Сумму» из данной строки. Это не поможет мне ни на шаг, потому что, если, скажем, счет за 3000 долларов будет оплачен двумя платежами по 1000 и 2000 долларов соответственно, список будет не только по-прежнему отображать счет, но и отображать его дважды - один раз с оставшимися 2000 долларов и один раз с оставшимися 1000 $.
Я использую LibreOffice Base с Firebird.
РЕДАКТИРОВАТЬ: При дальнейшем вводе данных я обнаружил один случай двойной оплаты, который был указан выше (два раза с разными «оставшимися ценами»), и еще один такой двойной платеж отображается один раз с ценой «0 долларов», возможно из-за того, что раскололся пополам?