2015-12-06 161 views
1

我有兩個表,一個用於銷售,另一個用於庫存。 我想從銷售表中選擇位置ID,商品ID,尺寸ID和銷售數量,而我只想從銷售表中選擇相同位置ID和尺寸ID的庫存表中的庫存數量,如下所示:在一個結果表中結合多個select語句

銷售表:

------------------------------------ 
| loc_id | item_id | size_id | qty | 
------------------------------------ 
| 5 | 11321 | 1 | 5 | 
| 5 | 11321 | 2 | 8 | 
| 5 | 11321 | 3 | 4 | 
| 5 | 11321 | 2 | 1 | 

庫存表:

------------------------------------ 
| loc_id | item_id | size_id | qty | 
------------------------------------ 
| 5 | 11321 | 1 | 3 | 
| 5 | 11321 | 2 | 7 | 
| 5 | 11321 | 3 | 9 | 

所以選擇後的結果應該是這樣的:

------------------------------------------------------ 
| loc_id | item_id | size_id | sales_qty | stock_qty | 
------------------------------------------------------ 
| 5 | 11321 | 1 |  5  |  3  | 
| 5 | 11321 | 2 |  9  |  7  | 
| 5 | 11321 | 3 |  4  |  9  | 

這裏就是我試圖做的:

SELECT SUM(T1.qty) AS `salesQty`, SUM(T2.qty) AS `stockQty`, T1.size_id, 
T1.loc_id 
FROM sales T1 
INNER JOIN stock T2 ON T2.item_id = T1.item_id AND T2.size_id = T1.size_id 
WHERE T1.item_id = '11321' 
AND T1.size_id IN (1,2,3) 
AND T1.loc_id IN (5) 
GROUP BY T1.size_id, T1.loc_id 

但庫存數量永遠是錯的!

+0

嘗試改變:SUM(T2.qty)總結(數量) –

+0

@KohjahBreese,我得到 「列 '數量' 中的字段列表不明確」! – CairoCoder

+0

然後嘗試更改:SUM(T2.qty)to T2.qty + T1.qty;我會在答案中發帖。 –

回答

0
select 
    q1.loc_id 
    ,q1.item_id 
    ,q1.size_id 
    ,sum(case when q1.Type='Sales' then q1.Qty else 0 end) as sales_qty 
    ,sum(case when q1.Type='Stock' then q1.Qty else 0 end) as stock_qty 
from (

select 
    T1.loc_id 
    ,T1.item_id 
    ,T1.size_id 
    ,'Sales' as Type 
    ,SUM(T1.qty) AS Qty 
from sales T1 
group by 
    T1.loc_id 
    ,T1.item_id 
    ,T1.size_id 

union all 

select 
    T2.loc_id 
    ,T2.item_id 
    ,T2.size_id 
    ,'Stock' as Type 
    ,SUM(T2.qty) AS Qty 
from stock T2 
group by 
    T2.loc_id 
    ,T2.item_id 
    ,T2.size_id) q1 

group by 
    q1.loc_id 
    ,q1.item_id 
    ,q1.size_id 
+0

錯誤的結果呢! – CairoCoder

+0

@CairoCoder我的道歉,我編輯了我的答案,並測試了結果,這應該工作。 –