2017-01-26 51 views
0

我有兩個表名爲tbl_brandstbl_counter_stock。 在tbl_brands有品牌id和品牌名稱的鍵值對。 tbl_counter_stock列與brnd_id,2000ml,1000ml,stock,stock_date相似。 每一行代表像 O型開幕, R-收到 S-銷售, C-關閉 我想獲取記錄從這個表,如果關閉各品牌的庫存品牌與不同股票利口酒C(收盤股票)的條目不存在於此表中,那麼我想獲取該品牌的O(開盤股票)。如果關閉股票已經存在於該品牌中,我將獲得開盤和結算股票的價值。這對我來說不是理想的結果。我只想在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

我認爲解決的辦法是更容易理解,當你創建一個表:
創建表(table_C)與Closing_Stock只(WHERE子句減少到B.STOCK =「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

我很高興我能幫助你。我只注意到我在第二個where子句中忘記了STOCK_DATE併爲了完整性而對其進行了修正。 – iLikeMySql

+0

非常感謝。我自己做了:) –

相關問題