2016-10-28 2 views
0

私は2つのシンプルなテーブルを持っています。 tbl_purchasedtbl_soldどのように列の合計値の間のディフェレンスを取るか?

は、私が購入したアイテムの

  1. SUM、項目名、GROUP BYを取る必要があり

    col_item_name col_no_of_items 
    Fan       5 
    Builb      5 
    Oven      5 
    Fan       2 
    Builb      2 
    

    tbl_sold

    col_item_name col_no_of_items 
    Fan       3 
    Oven      1 
    

    をtbl_purchased。

  2. 売り上げの合計、GROUP BYの商品名。

次のクエリを個別に使用してこれを行うことができます。

SELECT col_item_name, SUM(col_no_of_items) 
FROM tbl_purchased 
GROUP BY col_item_name; 

SELECT col_item_name, SUM(col_no_of_items) 
FROM tbl_sold 
GROUP BY col_item_name; 

今私は現在の在庫を取る必要があります。アイテム名BY GROUP - 、 (販売された商品のSUM購入したアイテムのSUM)を意味

enter image description here

SINGLE SQLクエリを使用してこれを行うことはできますか?

SELECT p.col_item_name, SUM(p.col_no_of_items) - SUM (s.col_no_of_items) 
FROM tbl_purchased p 
left join tbl_sold s on p.col_item_name=s.col_item_name 
GROUP BY p.col_item_name; 
+0

本当にテーブルにキーが必要です。さらに2人のファンを購入したい場合はどうなりますか? – apokryfos

+1

これは疑わしく宿題のように見えます。あなたは単一のクエリでそれを行うことができます。ジョインと集計関数を読み込みます。 – Walf

+0

私はあなたが 'tbl'と 'col'の列は非常に素早く非常に疲れてテーブルの接頭辞の練習を見つけると思う。 – Strawberry

答えて

2

は怒鳴る(ただし、それを調整する必要があるかもしれません)のようなものを試してみてください。 name、((SELECT SUM(NO)purcahse FROM WHERE name = p.name) - (0)sellname = s.name)から、(SUM(NO)COALESCE選択)purcahse Pの左から残り sell SがON JOIN p.name = s.name GROUP BY p.name;簡単な計算を行うため、次に、tbl_curent_stockに(例えばcol_no_of_items_purchased要約に名前を付ける必要があります)あなたの最初のテーブル式に参加:

+0

ありがとうございましたAndrei Filimon .. – samrukshan

0

それとも、これは完全にあなたのため

SELECT pは仕事

SELECT col_item_name, SUM(no_purchased) - SUM(no_sold) AS item_stock 
FROM 
    (SELECT col_item_name, col_no_of_items AS no_purchased, 0 AS no_sold 
    FROM tbl_purchased 
    UNION ALL 
    SELECT col_item_name, 0 AS no_purchased,col_no_of_items AS no_sold) 
GROUP BY col_item_name 
+0

onedaywhen Kep Brown .. – samrukshan

0

を使用することができます。

+0

'purcahse'とは​​何か – Strawberry

+0

purcahseは購入表で、売りは売り上げテーブルです –

+0

それは私のものではありませんが、' purchase'や 'tbl_purchased'と呼ばないのはなぜですか? – Strawberry

0

提案:)感謝を楽しみます。アンチ・ジョイントによって購入されていないアイテムについても考慮する必要があります。次にUNION 2つを合わせて:

SELECT col_item_name, 
     col_no_of_items - col_no_of_items_purchased AS col_no_of_items 
FROM tbl_curent_stock 
    NATURAL JOIN 
    (SELECT col_item_name, 
       SUM(col_no_of_items) AS col_no_of_items_purchased 
     FROM tbl_purchased 
     GROUP 
      BY col_item_name) AS t 
UNION 
SELECT col_item_name, col_no_of_items 
    FROM tbl_curent_stock 
WHERE col_item_name NOT IN (SELECT col_item_name 
           FROM tbl_purchased); 
+0

ありがとうonedaywhen .. – samrukshan

関連する問題