首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

急这两个表要如何合并

2012-01-19 
急,这两个表要怎么合并表一:小学表年级小学人数120021983190419551606158表二:中学表年级 中学人数1500248

急,这两个表要怎么合并
表一:小学表
年级 小学人数
1 200
2 198
3 190
4 195
5 160
6 158

表二:中学表
年级 中学人数
1 500
2 485
3 490

想得到如下表:
年级 小学人数 中学人数
1 200 500
2 198 485
3 190 490
4 195
5 160
6 158



[解决办法]
select a.*,b.中学人数 from 小学表 a left join 中学表 b on a.年级=b.年级
[解决办法]
select a.*, b.中学人数 from 小学表 a,中学表 b
[解决办法]
full join

[解决办法]
select isnull(a.年级,b.年级) 年级 , isnull(a.小学人数,0) 小学人数 , isnull(b.中学人数,0) 中学人数
from 表一 a full join 表二 b on a.年级 = b.年级
[解决办法]

SQL code
create table a(年级 int,小学人数 int)insert into a values(2,     198)  insert into a values(3,     190)  insert into a values(4,     195)  insert into a values(5,     160)  insert into a values(6,     158)  create table b(年级 int,中学人数 int)insert into b values(1,    500  )insert into b values(2,    485  )insert into b values(3,    490  )  goselect isnull(a.年级,b.年级) 年级 , isnull(a.小学人数,0) 小学人数 , isnull(b.中学人数,0) 中学人数from a full join b on a.年级 = b.年级order by a.年级drop table a,b/*年级          小学人数        中学人数        ----------- ----------- ----------- 1           0           5002           198         4853           190         4904           195         05           160         06           158         0(所影响的行数为 6 行)*/
[解决办法]
declare @表一 table (年级 int ,小学人数 int )
insert into @表一

select 2 , 198 
union all
select 3 , 190 
UNION ALL
select 4 , 195 
UNION ALL
select 5 , 160 
UNION ALL
select 6 , 158 

declare @表二 table (年级 int ,中学人数 int )
insert into @表二 
select 1 , 500 
UNION ALL
select 2 , 485 
union all
select 3 , 490 


select * from (select a.*,b.中学人数 from @表一 a left join @表二 b on a.年级=b.年级
union all
select b.年级,小学人数=0,b.中学人数 from @表二 b where b.年级 not in (select a.年级 from @表一 a))c order by c.年级


结果:
10500
2198485
3190490
4195NULL
5160NULL
6158NULL

[解决办法]
这里用到了外连接,可以使用左外连接或者右外连接
如果是作外连接,左面的是主表,也就是说主表中的值全部会在连接中出现,而次表中无对应的值则用null替代
在这里我用个左外连接:
select a.*,b.中学人数
from 小学表 left join 中学表
where 小学表.年纪=中学表.年级
[解决办法]
select *,中学人数 from 小学表 letf join 中学表 on 小学表.id=中学表.id
[解决办法]
select isnull(a.年级,b.年级) 年级 , isnull(a.小学人数,0) 小学人数 , isnull(b.中学人数,0) 中学人数
from a full join b on a.年级 = b.年级
order by a.年级

这种比较好。。
[解决办法]
老乌龟的写法,顶一下
select isnull(a.年级,b.年级) 年级 , isnull(a.小学人数,0) 小学人数 , isnull(b.中学人数,0) 中学人数
from a full join b on a.年级 = b.年级
order by a.年级

[解决办法]
应该用全连接
select case when a.年级 is null then b.年级 else a.年级 end 年级,
a.小学人数,b.中学人数 from 小学表 a full join 中学表 b on a.年级=b.年级
------解决方案--------------------


agree

full join
[解决办法]
6楼的很正确.
select isnull(xiaoxue.年级,zhongxue.年级) as 年级,xiaoxue.小学人数,isnull(zhongxue.中学人数,0) as 中学人数 from xiaoxue full join zhongxue on xiaoxue.年级=zhongxue.年级
order by xiaoxue.年级
[解决办法]
full join

热点排行