2017-01-26 1 views
0

tbl_brandstbl_counter_stockの2つのテーブルがあります。 tbl_brandsには、ブランドIDとブランド名のキーと値のペアがあります。 の列は、brnd_id,2000ml,1000ml,stock,stock_dateのような列である。 各行 O-オープニング、 R-受信 S-販売、 C-閉会 が、私はこの表から各ブランドの証券を閉じるためとあれば、レコードを取得したいのような異なる株式とリキュールのブランドを表しこの表にC(Closing Stock)のエントリがない場合、そのブランドのO(Opening Stock)を取得したいと考えています。閉鎖する株式が既にそのブランドに存在する場合は、私はオープニングとクローズの両方の値を取得しています。そして、これは私にとって望ましい結果ではありません。私はC(クローズ・ストック)が存在しない場合にのみ、O(オープニング・ストック)を取得したい。 ありがとうございます。行がテーブルに存在しない場合、別の行の値を取得する方法はありますか?

SELECT 
     A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0) bottles, 
     B.stock,B.stock_date 
     FROM tbl_brands A 
     left OUTER JOIN 
     tbl_counter_stock AS B 
     on A.BRND_ID=B.BRND_ID 
     AND B.STOCK IN('O','C') 
     AND B.STOCK_DATE='2017-01-18' 

答えて

1

私は解決策は、あなたがテーブルを作成するときに理解することが容易であると思う:
は左後(節はB.STOCK =「C」に減少WHERE)のみClosing_Stockで を(table_C)のテーブルを作成しますから参加しますあなたのtbl_brandsをtable_Cに渡して、閉鎖株式レコードがないすべてのbrand_idを見つけ、あなたのtbl_counter_stock(WHERE B.STOCK = 'O')に参加して欠落IDを挿入します。

CREATE TABLE brand_stock_overview (Key brnd_id(brnd_id)) 
SELECT A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0) 
bottles, B.stock,B.stock_date 
FROM tbl_brands A 
LEFT JOIN tbl_counter_stock AS B ON(A.BRND_ID=B.BRND_ID) 
WHERE B.STOCK ='C' 
AND B.STOCK_DATE='2017-01-18'; 

INSERT INTO brand_stock_overview 
SELECT A.brnd_id,A.brnd_name,'2000ml' capacity,COALESCE(B.`2000ml`,0)  
bottles, B.stock, B.stock_date 
FROM tbl_brands A 
LEFT JOIN tbl_counter_stock AS B ON(A.BRND_ID=B.BRND_ID) 
LEFT JOIN brand_stock_overview C ON(A.BRND_ID=C.BRND_ID) 
where B.STOCK='O' AND C.BRND_ID IS NULL 
AND B.STOCK_DATE='2017-01-18'; 
+0

これはすばらしい解決策であり、私のために働いた。私はたくさん苦労していて、あなたは私を助けました:)非常に@iLikeMySqlありがとうございます –

+0

私はあなたを助けることができてうれしいです。私はちょうど2番目のwhere句でSTOCK_DATEを忘れてしまったことに気付き、完全性のために修正しました。 – iLikeMySql

+0

ありがとうございました。私は自分でそれをやった:) –

関連する問題