2016-02-20 71 views
1

我正在爲經營店中店的朋友構建一個簿記應用程序。基本上,每個產品都由賣家擁有。將交易訂單行拆分爲兩類

他們想要一個概述,他們可以看到交易中多少錢支付給他們的產品(賣方1擁有)以及多少錢支付給其他產品(seller!= 1)。

這裏的ERD:ERD

我嘗試以下查詢:

SELECT transaction.id, SUM(orderline.count), SUM(orderline.price), SUM(o1.price), SUM(o2.price), transaction.date 
FROM transaction 
JOIN orderline 
    ON orderline.transaction_id = transaction.id 
JOIN product 
    ON product.barcode = orderline.product_barcode 
JOIN orderline o1 
    ON o1.transaction_id = transaction.id AND o1.product_barcode IN (SELECT barcode FROM product WHERE seller_id = 1) 
JOIN orderline o2 
    ON o2.transaction_id = transaction.id AND o2.product_barcode IN (SELECT barcode FROM product WHERE seller_id != 1) 
GROUP BY transaction.id 

不幸的是,這只是返回一個交易,而不是所有的,它不要麼返回價格的正確總和:

Result

在用於交易77,SUM(o1.price) SHO的值應該是4.5,而SUM(o2.price)應該是0.95。 SUM(orderline.price)的值是正確的。

我想反過來得到所有的交易,然後是賣方1擁有的產品和賣方擁有的產品價值的總價值,價值!= 1(當然,產品應該是交易的一部分)。

回答

1
SELECT TRANSACTION.id, 
    Sum(orderline.count), 
    Sum(orderline.price), 
    Sum(case when product.seller_id = 1 then orderline.price else 0 end), 
    Sum(case when product.seller_id <> 1 then orderline.price else 0 end), 
    TRANSACTION.date 

從交易 JOIN訂單項目 ON orderline.transaction_id = TRANSACTION.id JOIN產品 ON product.barcode = orderline.product_barcode GROUP BY TRANSACTION.id,TRANSACTION.date

+0

這似乎是工作。爲什麼我需要按交易ID *和*交易日期進行分組? –

+0

如果'sum,avg'函數(如使用這些函數)必須在每個組中按列使用。 – Sonsuz