Alexos
Новичок
firebird 1.5, агрегатные функции и HAVING
Заимелся я что то со следующей задачей..
Есть таблица клиентов CLIENTS..
Есть таблица клиентских заказов ZAKAZ (с полем для суммы долга по заказу)..
Есть таблица всех клиентских платежей KASSA..
Необходимо вывести всех клиентов, у которых сумма всех платежей обязательно с маркером "Т" и "31" (таблица KASSA) минус сумма всех его долгов по всем его заказам (таблица ZAKAZ) не равнялась бы нулю!!!
Проще говоря, вывод должников определенной категории!!!
Результат таков - долго думаем и ничего не выводим..
Заимелся я что то со следующей задачей..
Есть таблица клиентов CLIENTS..
Есть таблица клиентских заказов ZAKAZ (с полем для суммы долга по заказу)..
Есть таблица всех клиентских платежей KASSA..
Необходимо вывести всех клиентов, у которых сумма всех платежей обязательно с маркером "Т" и "31" (таблица KASSA) минус сумма всех его долгов по всем его заказам (таблица ZAKAZ) не равнялась бы нулю!!!
Проще говоря, вывод должников определенной категории!!!
PHP:
SELECT CLIENTS.CLIENT_ID,
CLIENTS.FIO,
SUM(ZAKAZ.UNRDOLG * ZAKAZ.CUR_CURS) as SUM_DOLGA_Z, // сумма долга по всем заказам
SUM(KASSA.OPSUMM * KASSA.OPCURCURS) AS OPSUMM // сумма сумма всех платежей
FROM CLIENTS
LEFT JOIN ZAKAZ ON (ZAKAZ.CLIENT_ID=CLIENTS.CLIENT_ID)
LEFT JOIN KASSA ON (KASSA.OPKONTRA=CLIENTS.FIO)
WHERE ZAKAZ.UNRDOLG <> 0
AND KASSA.OPSTAT = 31
AND KASSA.KASSA_AUTOGEN='T'
GROUP BY CLIENTS.CLIENT_ID, CLIENTS.FIO
HAVING (SUM(KASSA.OPSUMM * KASSA.OPCURCURS) - SUM(ZAKAZ.UNRDOLG * ZAKAZ.CUR_CURS)) <> 0
ORDER BY CLIENTS.FIO ASC