2016-05-18 13 views
-3

私は以下の2つのテーブルT1とT2を持っています。SQL Serverで2つのテーブルをマージする方法はありますか。

表T1

Id Value1 

1 2 
2 1 
3 2 

表T2

Id Value2 

1 3 
2 1 
4 1 

私は、事前に以下の

Id Value1 Value2 
1 2  3 
2 1  1 
3 2  0 
4 0  1 

感謝を返すために、SQL Serverクエリを必要とします!

+1

[SQL JOINとJOINを異なる種類(http://stackoverflow.com/questions/17946221/sql-join-and-different-types-of-joins)の可能性の重複 –

答えて

0

あなたは、与えられたサンプルデータとISNULL

実行してを登録しようFULL OUTERすることによって、これを達成することができます:

DECLARE @Table1 TABLE (Id INT, Value1 INT) 
INSERT INTO @Table1 VALUES (1, 2), (2, 1), (3, 2) 

DECLARE @Table2 TABLE (Id INT, Value2 INT) 
INSERT INTO @Table2 VALUES (1, 3), (2, 1), (4, 1) 

SELECT ISNULL(T1.Id, T2.Id) AS Id, 
     ISNULL(T1.Value1, 0) AS Value1, 
     ISNULL(T2.Value2, 0) AS Value2 
FROM @Table1 T1 
FULL OUTER JOIN @Table2 T2 ON T2.Id = T1.Id 

結果:

Id Value1 Value2 
1 2  3 
2 1  1 
3 2  0 
4 0  1 
0

FYI-Mergeは、SQL Serverで何か異なることを意味します。

すべての可能なId値のリストを含む表がある場合は、その中からすべてを選択し、T1とT2に2つの左外部結合が残っていることをお勧めします。

提供されているものだけで、完全な外部結合が必要なように思えます。

このような何か作業をする必要があります:

SELECT Id = COALESCE(T1.Id, T2.Id), 
     Value1 = COALESCE(T1.Value1, 0), 
     Value2 = COALESCE(T2.Value2, 0) 
FROM T1 
     FULL OUTER JOIN T2 
        ON T1.ID = T2.ID 
0

FULL OUTER JOIN基本的な:これは、一緒に両方のテーブルを結合し、一致するものがない場合でも、両方のテーブルからレコードを保持します

SELECT coalesce(t1.id,t2.id) as [ID], 
     coalesce(t1.value1,0) as Value1, 
     coalesce(t2.value2,0) as Value2 
FROM t1 
FULL OUTER JOIN t2 
ON(t1.id = t2.id) 

フル・ジョインのために、null値を置き換えるのにCOALESCE()が使用されます。

0

これを試してみてください。 SQL Server 2012でうまく動作します。

--Create two temp tables 
    CREATE TABLE #temp1 
    (Id int,Value1 int) 

    CREATE TABLE #temp2 
    (Id int,Value2 int) 
--Insert Values to two tables 
    INSERT INTO #temp1 
    (Id,Value1) 
    VALUES 
    (1,2),(2,1),(3,3) 

    INSERT INTO #temp2 
    (Id,Value2) 
    VALUES 
    (1,3),(2,1),(4,1) 
--Query which gives desired output 
    SELECT 
     ID = COALESCE(#temp1.Id, #temp2.Id), 
     Value1 = COALESCE(#temp1.Value1, 0), 
     Value2 = COALESCE(#temp2.Value2, 0) 
    FROM 
     #temp1 FULL JOIN #temp2 ON #temp1.Id = #temp2.Id 
0

完全結合の一般的な構文は次のとおりです。

SELECT column-names 
    FROM Table1 FULL OUTER JOIN Table2 
    ON column-name1 = column-name2 
WHERE condition 
関連する問題