2014-03-05 12 views
0

我有兩個Microsoft SQL查詢,它們都提供兩列但行數不同。這些結果如下:如何從具有不同行數的兩個單獨的MS SQL查詢中添加兩列

首先查詢:

ProductID, Inventory 
1, 100 
2, 50 
3, 200 

第二個查詢:

ProductID, Sales 
1, -20 
2, -50 

我想要得到以下的輸出:

ProductID, BalanceInventory 
1, 80 
2, 0 
3, 200 

我一直在使用加號試在這樣的查詢中:

Select t1.ProductID, 
     t1.Inventory + (Case when t2.Sales is null then 0 else t2.Sales end) as 'BalanceInventory' 
    from t1 full join t2 on t1.ProductID = t2.ProductID 

問題在於數據庫結構的設計方式使銷售和庫存無法在同一查詢中運行。 因此,我需要運行兩個單獨的查詢,然後爲每個ProductID添加兩列「庫存和銷售額」。

實際的數據庫結構和查詢要複雜得多。我試圖通過創建一個假設來簡化問題。

請幫忙。這是吃了我的頭。

感謝, 卡蘭

+0

您當前的查詢看起來不錯,它應該按原樣運行。現在,您的實際查詢有多複雜?不用看實際的查詢就沒有什麼可說的了。 –

回答

1

試試這個

select ProductID, (inv.Inventory + s.Sales) as BalanceInventory 
from 
( 
    select ProductID, Inventory 
    from [table] 
    where xxx 
) inv 
left outer join 
(
    select ProductID, Sales 
    from [table] 
    where xxx 
) s on (s.ProductID = inv.ProductID) 
+0

謝謝你Lwin Oo。這對Thiago Cardoso提出的IsNull部分稍作修改。我用這個代碼: 選擇的ProductID,(inv.Inventory + ISNULL(s.Sales,0))作爲BalanceInventory 從 ( 選擇的ProductID,庫存 從[表] 其中xxx )INV 左外連接 ( 選擇產品ID,銷售 從[表] 其中xxx )S ON(s.ProductID = inv.ProductID) – user3385784

+0

要知道,如果有一個或更多的銷售記錄,但對產品沒有庫存記錄,這解決方案將完全忽略該產品。即它根本不包括銷售。 –

+0

謝謝ElectricLlama ..我想通了..但在我的情況下,銷售記錄總是一個庫存記錄的子集..謝謝你的警惕.. – user3385784

0

你能避免使用CASE表達式 「的isNull(表達式,0)」。

關於你的問題,如果你不能在查詢中使用任何連接,嘗試使用UNION操作: http://technet.microsoft.com/en-us//library/ms180026.aspx

+0

在我所有的查詢中,我使用了case表達式來避免null值。我不知道IsNull。感謝蒂亞戈。這會幫助我很多。乾杯。!! – user3385784

1

另一種選擇是

SELECT UnionTable.ProductID, SUM(UnionTable.BalanceInventory) AS BalanceInventory 
FROM (
    SELECT ProductID, Inventory As BalanceInventory 
    FROM Table1 
    UNION ALL 
    SELECT ProductID, Sales As BalanceInventory 
    FROM Table2 
) As UnionTable 
GROUP BY UnionTable.ProductID 

要減去而不是相加,簡單地使一部分爲負數:

SELECT UnionTable.ProductID, SUM(UnionTable.BalanceInventory) AS BalanceInventory 
FROM (
    SELECT ProductID, Inventory As BalanceInventory 
    FROM Table1 
    UNION ALL 
    SELECT ProductID, -Sales As BalanceInventory 
    FROM Table2 
) As UnionTable 
GROUP BY UnionTable.ProductID 
+0

謝謝ElectricLlama。該解決方案也可以正常工作。我嘗試了兩種解決方案並獲得了相同的結果。 只有一個問題,在情況下,我們必須減去兩個值,我們怎麼更換SUM一部分? – user3385784

+0

使用我的sql腳本。只是改變(inv.Inventory - s.Sales) –

+0

是Thit Lwin Oo。我做到了,得到了結果。只是想知道如何修改ElectricLlama給出的查詢來減去值而不是添加它們。不管怎樣,謝謝你們所有人。我想我應該在一個小時後發佈這個查詢。可以節省一些時間。乾杯。!! – user3385784

相關問題