从两个不同的表中连接两个不同的列并合并重复项

时间:2011-12-14 10:44:30

标签: sql-server join union

我有两个临时表 表1

 ID1         Name        ID2           Single
----------------------------------------------------
 1            ABC         1            100
 2            DEF         1            200

表2

 ID1         Name        ID2           Monthly
----------------------------------------------------
 3            PQR         2            500
 4            LMN         2            600
 1            ABC         2            700
 2            DEF         2            800

我想要输出

 ID1         Name        ID2            Single   Monthly
--------------------------------------------------------
 1            ABC         1            100        700
 2            DEF         1            200        800
 3            PQR         2            NULL       500
 4            LMN         2            NULL       600

我使用所有联盟,联盟ALL,联盟没有任何效果 提前谢谢

2 个答案:

答案 0 :(得分:1)

试试这个:

select coalesce(T1.ID1, T2.ID1) as ID1,
       coalesce(T1.Name, T2.Name) as ID1,
       coalesce(T1.ID2, T2.ID2) as ID2,
       T1.Single,
       T2.Monthly
from Table1 as T1
  full outer join Table2 as T2
    on T1.ID1 = T2.ID1

http://data.stackexchange.com/stackoverflow/q/121659/

如果您知道表2中始终存在所有行,则可以使用right outer join代替full join

答案 1 :(得分:0)

希望您使用的是Sql Server 2008(否则我的查询中的insert语句将无效)。试试这个吧。 从所需的输出,我猜你需要table2中的所有值和相应的Single(表1中的列名)值。

DECLARE @tempTable1 TABLE (ID1 INT,Name VARCHAR(10),ID2 INT,Single INT)
DECLARE @tempTable2 TABLE (ID1 INT,Name VARCHAR(10),ID2 INT,Monthly INT)

    INSERT INTO @tempTable1 VALUES
    (1            ,'ABC'         ,1            ,100),
    (2            ,'DEF'         ,1            ,200)

INSERT INTO @tempTable2 VALUES
(3            ,'PQR'         ,2            ,500  ),
(4            ,'LMN'         ,2            ,600  ),
(1            ,'ABC'         ,2            ,700  ),
(2            ,'DEF'         ,2            ,800 );
SELECT
                T2.ID1
                ,T2.Name
                ,T2.ID2
                ,T1.Single
                ,T2.Monthly

FROM            @tempTable2 T2
LEFT OUTER JOIN @tempTable1 T1
ON              T2.ID1 = T1.ID1
ORDER BY        T2.ID1