2015-12-06 127 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我的道歉,我编辑了我的答案,并测试了结果,这应该工作。 –