2011-08-21 7 views
1

나는 다음과 같은 테이블 구조를 가지고 : 특정한 드라이버 아이디 +를 제외하고 특정 고객에 대한 모든 무급 주문의 합으로 표시 마지막 무급 순서를 보여주고 싶은 무엇도움말

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 `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

당신이 내 예를보다 명확하게 보이지만, 꽤 무엇을 아니다

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)[email protected] AS sum_total, 
    SUM((@st*b.vat)/100)[email protected] 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 
+0

시도 할 수 마지막 부분 만 (다른 무급 주문 금액의 합)이 부족

나의 현재 SQL 기대했다. 고객 당 미납 주문 ** ** 그 고객에 대한 미 지불 주문 금액의 합계 (표시된 주문 제외)로 끝나야합니다. 나는 당신의 모범을 바탕으로 내 작업을 재구성하고 내일 아침에 다시 게시하려고 노력할 것입니다. – Frank

+0

단순히 고객 ID를 포함하는 것을 잊었습니까? – rabudde