2017-04-09 37 views
-1

我正在努力與查詢,我希望有人可以幫助。如何製作此類MySQL查詢?

我有兩個表Sale & SaleLine由場SaleUUID但表銷售相關也紛紛OriginalSaleUUID領域,這是一個父UUID

我想要實現的是顯示特定銷售的物品清單及其數量以及退貨數量(可能爲0,這意味着沒有銷售記錄& SaleLine表的退貨或多次退貨項目和銷售)。

我希望這是有道理的。

表單位:

SaleUUID OriginalSaleUUID 
1 
2   1 
3   1 

表SaleLine:

SaleLineUUID SaleUUID SaleLineItemName SaleLineQuantity 
1    1   Item A    3 
2    1   Item B    1 
3    2   Item A    1   
4    3   Item A    1 

預期結果:

Item Name Item Quantity Item Quantity (Return) 
Item A  3    2 
Item B  1    0 

這是最後一次嘗試。我今天已經花了幾個小時沒有一個可行的解決方案:即使這一個也不行,因爲它應該。它爲兩個項目提供了相同的結果,但只有第一個纔有回報。

SELECT 
    SL1.SaleLineItemName, 
    SL1.SaleLineQuantity, 
    COALESCE((
    SELECT 
(SL2.SaleLineQuantity) 
    FROM 
     Sale S2, SaleLine SL2 
    WHERE 
     S2.SaleUUID = SL2.SaleUUID 
     AND S2.OriginalSaleUUID = S1.SaleUUID), 0) 
    FROM 
     Sale S1, 
     SaleLine SL1 
    WHERE 
     S1.SaleUUID = SL1.SaleUUID 
     AND S1.SaleUUID = ? 

回答

0
SELECT what_you_need, SUM(IF(OriginalSaleUUID IS NULL, SaleLineQuantity, 0)) quantity, SUM(IF(OriginalSaleUUID IS NOT NULL, SaleLineQuantity, 0)) ret 
FROM SaleLine 
JOIN Sale USING(SaleUUID) 
GROUP BY IFNULL(OriginalSaleUUID, SaleUUID), SaleLineItemName 

此外,使用連接(https://dev.mysql.com/doc/refman/5.7/en/join.html)而不是通過WHERE條件結合兩個表。這是「現代」的語法。

+0

感謝Viliam,但我忘了提及我正在嘗試在FileMaker中使用SQL,其中USING,IFNULL和IF不受支持。代替IFNULL,我可以使用COALESCE,但不確定USING。其他一切都得到支持。 FileMaker 15 SQL參考 - 支持的標準:https://fmhelp.filemaker.com/docs/15/en/fm15_sql_reference.pdf –

+0

@SebastijanB .:而不是使用,你可以做JOIN Sale ON Sale.SaleUUID = SaleLine.SaleUUID 。 USING只是一個「別名捷徑」。我似乎FileMaker支持CASE WHEN。您可以使用它來模擬IF/IFNULL - >如果OriginalSaleUUID爲NULL,那麼SaleLineQuantity ELSE 0 END ... –