2017-07-06 34 views
0

我有此表的文章從2和錶帶上的信息,並把它在同一列

--------------------------------------------- 
| Article | Location | existence | 
--------------------------------------------- 
|  200116 | cc3111  | 1  | 
--------------------------------------------- 
|  200116 | ee3091  |  1 | 
--------------------------------------------- 

而這個數目表

---------------------------------------------------- 
| Article | Location  | Quantity  | 
---------------------------------------------------- 
|  200116 | cc3111  | 10   | 
---------------------------------------------------- 
|  200116 | EE3091  | 8    | 
---------------------------------------------------- 
|  200116 | EE2102  | 5    | 
---------------------------------------------------- 
|  200116 | DD5131  | 7    | 
---------------------------------------------------- 

我想要做的就是給我一個結果就像下一個。

-------------------------------------------------------------------------- 
| Article | Location | Existence  | Quantity | DIF  | 
-------------------------------------------------------------------------- 
|  200116 | CC3111  |  1   |  10 |  9  |  
-------------------------------------------------------------------------- 
|  200116 | EE3091  |  1   |  8  |  7  | 
-------------------------------------------------------------------------- 
|  200116 | DD5131  |  0   | 7  |  7  | 
-------------------------------------------------------------------------- 
|  200116 | EE2102  |  0   | 5  |  5  | 
----------------------------- ------------------------------------------- 

但是,如果沒有自然後用Union做我不得不做另一個查詢,我只是不知道如何加入它,而無需使用Union

- 一些幫助若要執行此查詢

- 我不知道如何在同一列

回答

0

這裏的另一種選擇......

IF OBJECT_ID('tempdb..#Article', 'U') IS NOT NULL 
DROP TABLE #Article; 

CREATE TABLE #Article (
    Article INT NOT NULL, 
    Location CHAR(6) NOT NULL, 
    Existance INT NOT NULL 
    ); 

IF OBJECT_ID('tempdb..#Counts', 'U') IS NOT NULL 
DROP TABLE #Counts; 

CREATE TABLE #Counts (
    Article INT NOT NULL, 
    Location CHAR(6) NOT NULL, 
    Quantity INT NOT NULL 
    ); 

INSERT #Article(Article, Location, Existance) VALUES 
    (200116, 'cc3111', 1), (200116, 'ee3091', 1); 

INSERT #Counts(Article, Location, Quantity) VALUES 
    (200116, 'cc3111', 10), (200116, 'EE3091', 8), 
    (200116, 'EE2102', 5), (200116, 'DD5131', 10); 

SELECT * FROM #Article a; 
SELECT * FROM #Counts c; 

--===================================================== 

SELECT 
    Article = COALESCE(a.Article, c.Article), 
    Location = COALESCE(a.Location, c.Location), 
    Existance = COALESCE(a.Existance, 0), 
    Quantity = COALESCE(c.Quantity, 0), 
    DIF = COALESCE(c.Quantity, 0) - COALESCE(a.Existance, 0) 
FROM 
    #Article a 
    FULL JOIN #Counts c 
     ON a.Article = c.Article 
     AND a.Location = c.Location; 
+0

如果我把'WHERE a.Article = 200116';它不再起作用 – Eduard

+0

將其添加到WHERE子句中可過濾出由FULL JOIN導致的a.Article = NULL。將它從WHERE子句中移除並將其添加到FULL JOIN ON子句中... –

0

您需要添加位置JOIN這些表的,而不是做一個UNION。前者將把列並排,而後者會疊加兩個相似的來源在一起......

1

這看起來像一個left join

select t2.*, coalesce(t1.existence, 0) as existence, 
     (t2.quantity - coalesce(t1.existence, 0)) as dif 
from t2 left join 
    t1 
    on t2.article = t1.article and t2.location = t1.location; 
+0

以及如何添加'文章',我不知道如何把它們放在同一列 – Eduard

+0

我不明白你的評論。這應該給出問題中的結果集。 –

相關問題