2017-01-10 11 views
1

私は3つのテーブルを持っています:在庫、注文ラインと注文。私は各注文の注文ラインの合計を含める注文テーブルの合計列を持っています。 OrderlineテーブルはOrder_id、Stock_id、Qtyで構成され、StockテーブルにはStock_idとPriceがあります。各Order_idに関連付けられたStock_idsをフィルタリングしてそれぞれの数量を表示することができます。各Stock_idの価格を合計し、OrderlineのQtyと掛けることで、各注文のコストを計算するために内部結合を使用する必要があると思いますテーブルとストックテーブルの価格が、私はこれでどこから始めるべきかはわかりません。私はまた、各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と基本的なクエリでありますオーダーIDでグループ化され、合計であなたに注文します。 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のは、計算列をサポートしていませんが、あなたは2つのオプションがあります:

  1. が、その後Orderlineにトリガーを作成し、合計の値を格納するOrder表に追加の列を作成します。変更されたレコードの合計を再計算するテーブル。Stock
  2. 上記のクエリを別々のビューに変換し、合計が必要な場合はいつでも、INNER JOINを作成したビューからOrderテーブルに変換します。
+0

すごく、ありがとう。私は、トリガーを作成するだけで新しいデータに合計が追加されると思いますか? –

+0

完全な精度を得るには、INSERT/UPDATE/DELETEのトリガーが必要です。これにより、株価や注文数量の変更により、変更された株/注文に応じて「合計」が更新されるようになります。注文時の価格を固定する必要がある場合、Orderlineテーブルに 'Price'フィールドを置き、Orderlineにのみトリガーを設定し、' Stock'テーブルを無視して数量を優先しますオーダーラインの価格。 –

関連する問題