2010-04-19 110 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