2017-01-10 56 views
1

我有三個表:Stock,Orderline和Order。我在Order表中有一個Total列,我想包含每個訂單的訂單總和。 Orderline表由Order_id,Stock_id和Qty組成,Stock表有Stock_id和Price。我可以篩選與每個Order_id關聯的Stock_ID並顯示每個訂單的數量,我認爲我需要使用內部聯接來計算每個訂單的成本,方法是將每個Stock_id的價格相加並將其乘以訂單行中的數量表和股票表中的價格,但我不知道從哪裏開始。我還希望在計算每個Order_id時將其添加到數據庫中的Total列中,並且不知道如何執行該操作。我正在使用SQLite3。任何幫助將不勝感激。3表內部聯接的SQL計算

順序表: ORDER_ID,ORDER_TOTAL,order_datetime

訂單行表: ORDER_ID,STOCK_ID,數量

庫存表: STOCK_ID,STOCK_PRICE,stock_name

+0

這可能有助於顯示帶有列標題和一些示例行的表格 – BYates

+0

我不確定如何在此處使用表格,並且很難顯示它們。 –

回答

1

這是INNER JOIN基本查詢按訂單編號進行分組,按順序向您提供總數。你可以在GROUP BY之前的WHERE條款中做任何你需要的過濾器。

SELECT 
    O.order_id, 
    SUM(S.stock_price * OL.qty) AS [Total] 
FROM Order O 
    INNER JOIN Orderline OL 
     ON OL.order_id = O.order_id 
    INNER JOIN Stock S 
     ON S.stock_id = OL.stock_id 
GROUP BY 
    O.order_id 

雖然SQLite不支持計算列,你有兩個選擇:

  1. 創建添加到Order表來存儲總價值一列,然後創建一個Orderline觸發和Stock表來重新計算修改記錄的總數。
  2. 將上述查詢轉換爲單獨的視圖,然後在您需要總數時,從創建視圖到Order表執行INNER JOIN
+0

太好了,謝謝你。我認爲創建觸發器只會將總數添加到新數據中? –

+0

爲了獲得完整的準確性,您需要INSERT/UPDATE/DELETE觸發器,以便在對股票價格或訂單項數量進行任何修改時確保您的「總計」相應地針對修改的庫存/訂單進行更新。如果您需要鎖定訂單時的價格,那麼我會在Orderline表中放置一個'Price'字段,並且僅在Orderline上進行觸發操作,並且計算忽略'Stock'表格而僅支持數量和價格在Orderline。 –