2012-02-20 46 views
2

我有2個表格;SQL:sum(unit)table a minus sum(unit)table b

  1. item_in(ITEM_ID,股吧)
  2. item_out(ITEM_ID,股吧)

現在,讓我們說,我想知道有多少單位正在爲每個項目插入,我只是查詢

select sum(unit) from item_in order by item_id 

同樣的,如果我想知道被多少個單元取出來,我只是查詢

select sum(unit) from item_out order by item_id 

我不知道如何查詢每個項目的餘額(item_in - item_out)。

如果我可以在一個存儲過程中進行所有查詢,這很好,因爲我想使用DataWindow調用過程。

請幫忙,謝謝。

+0

運行時,您可能會發現任何語法差異是否有出現在item_in而不是在item_out。反之亦然項目? – 2012-02-20 08:16:32

+0

對了,還有的概率是一個項目從來沒有拿出,我試過你的答案,但沒有成功,我用左外連接,因爲完全外連接產生錯誤,有些人,它是t1.unit - t2.unit。但這也是行不通的。 – Iyas 2012-02-20 08:50:01

+0

但沒有,如果該項目在item_out中,這意味着它在item_in之前。 – Iyas 2012-02-20 08:53:16

回答

2
SELECT 
    item_id, 
    SUM(unit) AS unit_balance 
FROM (
    SELECT item_id, unit FROM item_in 
    UNION ALL 
    SELECT item_id, -unit FROM item_out 
) AS s (item_id, unit) 
GROUP BY item_id 
+0

謝謝,夥計!我在MySQL上試過這個查詢並獲得成功,我認爲Sybase應該沒有任何問題。 – Iyas 2012-02-20 14:42:33

+0

不幸的是,這個查詢不適用於Sybase。看起來Sybase希望在FROM之後有一個表名。 – Iyas 2012-02-21 06:02:34

+0

@Iyas:你確定你在子查詢之後添加了一個別名,就像我的例子('s')?如果Sybase不支持'FROM'子句中的子查詢,我會感到驚訝。 – 2012-02-21 06:11:51

0

我希望下面的查詢工作:

select 
sum(inn.unit) - sum(outt.unit) 
from item_in inn 
inner join item_out outt on inn.item_id = outt.item_id 
+0

您的查詢缺少由inn.item_id,outt.item_id – Iyas 2012-02-20 09:16:29

+0

組,但與Mosty Mostacho相同,有些item得到雙倍結果。 – Iyas 2012-02-20 09:16:56

1

我一無所知SYBASE,但是這個這個,還是一個微妙的變化,應該工作。

select t1.item_id, sum(t1.unit - coalesce(t2.unit, 0)) as Balance 
from item_in t1 
left join item_out t2 
on t1.item_id = t2.item_id 
group by t1.item_id 

合併會放一個0每當從T2的單位爲NULL,這樣就可以正確地從它的。減去單位item_in量。

注意:這適用於SQL Server。我不知道,如果在Sybase :(

+0

您的查詢如此接近我期望什麼。只是一些項目,說得對,一些項目的結果接近一倍。例如。預計2344,但得到了4123,類似的東西。 – Iyas 2012-02-20 09:07:43

+0

請重新運行它,因爲我多次更新查詢:)現在運行它(我不再更新它) – 2012-02-20 09:14:17

+0

我現在在家。無權訪問Sybase。但我在MySQL中試過你的查詢。我的樣本數據在item_in中有200個單位,在item_out中有50個單位,對於相同的item_id,我們應該預計會有150的平衡。您的查詢產生300,這是期望值的兩倍。無論如何,我真的很感謝你的幫助。謝謝。 – Iyas 2012-02-20 14:40:25