2011-12-14 117 views
0

加入两个不同的列我有两个临时表 表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 

我想输出

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

我使用的所有加盟什么工作 提前致谢

+1

请在写问题时查看预览。对这个问题的初始格式化非常难以挑选出单独的部分,并且表格格式不正确(他们仍然没有,但我会尽快尝试另一种编辑方式)。 – 2011-12-14 09:38:03

回答

2

JOIN不会为这种情况下,您需要在这里使用UNION

SELECT ID1, NAME, ID2, Single, NULL FROM Table1 
UNION ALL 
SELECT ID1, NAME, ID2, NULL, Monthly FROM Table2 
1

你不需要JOINS,你需要一个UNION (ALL)

UNION(的Transact-SQL)

将两个或更多个查询的结果到一个结果集 ,其包括属于在工会所有查询的所有行。 UNION操作与使用来自两个表的列 的连接不同。

SQL语句

SELECT ID1, Name, ID2, Single, NULL as Monthly 
FROM Table1 
UNION ALL 
SELECT ID1, Name, ID2, Null, Monthly 
FROM Table2 
0

尝试使用UNION

SELECT * FROM Single 
UNION 
SELECT * FROM Monthly 

希望提供s帮助。

+1

这与所需的输出不匹配,因为它只包含Single列,并且会在该列中包含每月值(并且可能会消除两个表之间的值,因为您已经使用了`UNION`而不是`UNION ALL`) – 2011-12-14 09:40:09

0

请使用以下查询......

选择 ID1, 名称, ID2, 单, NULL作为“每月”

从表1

联盟

选择 ID1, 名称, ID2, NULL作为“单”, 每月

从表2

2

以防万一,一些疯狂的原因,你真的需要它作为一个JOIN,而不是(因为对方的所指出的那样)一个UNION ALL

create table #T1 (ID1 int,Name varchar(10),ID2 int,Single int) 
insert into #T1 (ID1 ,  Name ,  ID2 ,  Single) 
select 1   ,'ABC',   1 ,   100 union all 
select 2   ,'DEF',   1 ,   200 

create table #T2 (ID1 int,Name varchar(10),ID2 int,Monthly int) 
insert into #T2 (ID1 ,  Name ,  ID2 ,  Monthly) 
select 3   ,'PQR',   2 ,   500 union all 
select 4   ,'LMN',   2 ,   600 

select COALESCE(t1.ID1,t2.ID1) as ID1,COALESCE(t1.Name,t2.Name) as Name, 
COALESCE(t1.ID2,T2.ID2) as ID2,t1.Single,t2.Monthly 
from #T1 t1 full outer join #T2 t2 on 1=0 

提供您要求的结果

+0

+1这样滥用SQL。 – 2011-12-14 13:23:14

相关问题