2010-04-19 108 views
3

我有一个库存表,我想创建一个报告,显示订购物品的频率。如何结合两个sql查询?

“股票” 表:

item_id | pcs | operation 
apples | 100 | order 
oranges | 50 | order 
apples | -100 | delivery 
pears | 100 | order 
oranges | -40 | delivery 
apples | 50 | order 
apples | 50 | delivery 

基本上我需要这两个查询连接在一起。

它打印股票余额查询:

SELECT stock.item_id, Sum(stock.pcs) AS stock_balance 
FROM stock 
GROUP BY stock.item_id; 

它打印的销售统计查询

SELECT stock.item_id, Sum(stock.pcs) AS pcs_ordered, Count(stock.item_id) AS number_of_orders 
FROM stock 
GROUP BY stock.item_id, stock.operation 
HAVING stock.operation="order"; 

我认为某种JOIN的会做的工作,但我不知道如何去胶一起查询。

希望的输出:

item_id | stock_balance | pcs_ordered | number_of_orders 
apples |    0 |   150 |    2 
oranges |   10 |   50 |    1 
pears |   100 |   100 |    1 

这仅仅是例子。也许,我需要添加更多的条件,因为有更多的列。是否有将多个查询组合在一起的通用技术?

回答

2
SELECT a.item_id, a.stock_balance, b.pcs_ordered, b.number_of_orders 
FROM 
    (SELECT stock.item_id, Sum(stock.pcs) AS stock_balance 
    FROM stock 
    GROUP BY stock.item_id) a 
LEFT OUTER JOIN 
    (SELECT stock.item_id, Sum(stock.pcs) AS pcs_ordered, 
      Count(stock.item_id) AS number_of_orders 
    FROM stock 
    WHERE stock.operation = "order" 
    GROUP BY stock.item_id) b 
ON a.item_id = b.item_id 
+0

非常感谢你。这正是我需要的,我终于知道如何简单地将两个SELECT与JOIN结合起来。 – Plasmuska 2010-04-19 09:19:21

1

这应该这样做

SELECT 
    stock.item_id, 
    Sum(stock.pcs) AS stock_balance, 
    pcs_ordered, 
    number_of_orders 
FROM stock LEFT OUTER JOIN (
    SELECT stock.item_id, 
    SUM(stock.pcs) AS pcs_ordered, 
    COUNT(stock.item_id) AS number_of_orders 
    FROM stock 
    WHERE stock.operation ='order' 
    GROUP BY stock.item_id 
    ) s2 ON stock.item_id = s2.item_id 
GROUP BY 
    stock.item_id, 
    pcs_ordered, 
    number_of_orders 
+0

谢谢,这个也适用。最后有一个小错误。最后一行应该是number_of_orders。 – Plasmuska 2010-04-19 10:41:29

+0

@plasmuska,确实..我在最后更改了名称,并忘记了这一个..更正了我的回答以反映此.. – 2010-04-19 13:00:02