Помощь по запросу MySQL - PullRequest
       2

Помощь по запросу MySQL

1 голос
/ 21 августа 2011

У меня следующая структура таблицы:

Customers  - Cust_Orders - Cust_Items  - Cust_Payments  -  Drivers
  id           id             id            id             id
  company      cid            oid           oid            name
               driver         price         amount
               date           qty           date
                              vat

Я хочу показать последний неоплаченный заказ, помеченный идентификатором конкретного водителя + сумму всех неоплаченных заказов для этого конкретного клиента, кроме заказа, которыйуже выбрано.

Так как может быть более одного cust_items и более одного cust_payments, я должен был использовать select from select, так как в противном случае у меня были бы неправильные суммы и вещи запутались, пока я не достиг точки, я забыл, чтоделал.

Любая помощь будет принята с благодарностью.

Мой текущий SQL, в котором отсутствует только последняя часть (сумма других неоплаченных заказов):

SELECT `customers`.`company`, 
T1.*, 
ROUND( IFNULL( SUM(`cust_payments`.`amount`), 0 ), 2) AS `paid` 
FROM (
SELECT `cust_orders`.*, 
    ROUND( IFNULL( SUM(`cust_items`.`qty` * `cust_items`.`price`), 0 ), 2) AS `total`, 
    SUM( ( `cust_items`.`price` * `cust_items`.`qty` * `vat` ) / 100) AS `vat` 
    FROM `cust_orders` 
    LEFT JOIN `cust_items` ON `cust_orders`.`id` = `cust_items`.`oid` 
    GROUP BY `cust_orders`.`id`
) `T1` 
LEFT JOIN `customers` ON `T1`.`cid` = `customers`.`id` 
LEFT JOIN `cust_payments` ON `T1`.`id` = `cust_payments`.`oid` 
WHERE `T1`.`driver` = ? GROUP BY `T1`.`id` HAVING (`T1`.`total` - `paid`) > ? 
ORDER BY `T1`.`id` DESC  LIMIT 1

1 Ответ

1 голос
/ 21 августа 2011

Можете ли вы попробовать

SELECT
    x.id,
    x.company,
    y.id,
    y.cid,
    y.driver,
    y.date,
    @ut:=ROUND(SUM(z.qty*z.price),2) AS unpaid_total,
    @uv:=SUM((@ut*z.vat)/100) AS unpaid_vat,
    @st:=ROUND(SUM(b.qty*b.price),2)-@ut AS sum_total,
    SUM((@st*b.vat)/100)-@uv AS sum_vat
FROM Customers x
INNER JOIN Cust_Orders y ON x.id=y.cid
INNER JOIN Cust_Items z ON y.id=z.oid
LEFT JOIN Cust_Orders a ON x.id=a.cid
LEFT JOIN Cust_Items b ON a.id=b.oid
WHERE
    y.driver=? AND
    NOT EXISTS (SELECT * FROM Cust_Payments WHERE oid=y.id) AND
    NOT EXISTS (SELECT * FROM Cust_Payments WHERE oid=a.id)
GROUP BY x.id,x.company, y.id, y.cid, y.driver, y.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...