Красноречивая сумма производного столбца в выражении select, а также where - PullRequest
0 голосов
/ 22 марта 2020

У меня есть таблица sales, у которой есть связанная таблица receipts.

Продажа может иметь много поступлений. Если сумма чеков меньше суммы продаж, то остается остаток.

У меня есть SQL, который работает так, как я хочу. Если у меня болит голова, пытаясь выразить это красноречиво.

        SELECT `sales`.`id`, `sales`.`created_at`,`sales`.`updated_at`,`sales`.`sales_date`,`sales`.`gross`,    `sales`.`net_amount`,`sales`.`vat_amount`,`sales`.`vat_rate`,`sales`.`description`,
            (SELECT SUM(receipt_gross_amount) as received_gross FROM `receipts` INNER JOIN `sales` WHERE `receipts`.`sales_id` = `sales`.`id`) as received
            FROM `sales`
        ) as unsettled_invoices
        WHERE unsettled_invoices.gross > COALESCE(unsettled_invoices.received,0)

Я не буду утомлять вас тем, что уже пробовал, поскольку это не имеет отношения к делу и просто заставляет php зависать и выдавать команду «kill» в команде линия ...

1 Ответ

0 голосов
/ 22 марта 2020

Это похоже на работу ...

$unsettledsalessentries = DB::table('sales')
            ->leftjoin('receipts', 'sales.id','=', 'receipts.sales_id')
            ->select('sales.id','sales.gross','sales.description',DB::raw('SUM(COALESCE(receipts.receipt_gross_amount,0)) as total_receipts'))
            ->groupBy('sales.id','sales.gross','sales.description')
            ->havingRaw('sales.gross > total_receipts')
            ->get();
...