当前位置: 代码迷 >> Sql Server >> 高分请问左连接显示空值的SQL语句
  详细解决方案

高分请问左连接显示空值的SQL语句

热度:74   发布时间:2016-04-24 10:52:20.0
高分请教左连接显示空值的SQL语句
tbMain:主表,主键xh
xm         xh        gzdw
张三   A001    市招商局
李四   A002    市招商局
王五   B001    市教育局
张兵   B002   市教育局
tbKh:考核表,主键xh+khnd
xh            khnd      khdc
A001       2012    优秀
A002       2012    合格
A001       2013    优秀
B001      2012    优秀
B002      2012    合格
B001      2013    优秀
B002      2013    合格

//请注意,A002在2013年度没有考核记录
要查询这个结果:市招商局全体人员2013年度考核结果
xm          xh         gzdw            khnd    khdc
张三   A011    市招商局   2013    合格
李四   A012    市招商局   NULL     NULL 
------解决方案--------------------
http://bbs.csdn.net/topics/390771437
这个帖子不行?就是你要做一个临时表和你的tbmain先做一个交叉连接,形成你每个人要考核年度的表,然后再和考核结果进行连接。否则的很难实现你要的功能
------解决方案--------------------


 ---建临时表
if object_id('Tempdb..#tbMain') is not null drop table #tbMain
if object_id('Tempdb..#tbKh') is not null drop table #tbKh
create table #tbMain(
aid int identity(1,1) not null,
xm nvarchar(100) null,
xh nvarchar(100) null,
gzdw nvarchar(100) null
)
create table #tbKh(
bid  int identity(1,1) not null,
xh nvarchar(100) null,
khnd nvarchar(10) null,
khdc nvarchar(10) null
)
---插入测试数据
Insert Into #tbMain
select '张三','A001','市招商局' union all
select '李四','A002','市招商局' union all
select '王五','B001','市教育局' union all
select '张兵','B002','市教育局'

Insert Into #tbKh
select 'A001','2012','优秀' union all
select 'A002','2012','合格' union all
select 'A001','2013','优秀' union all
select 'B001','2012','优秀' union all
select 'B002','2012','合格' union all
select 'B001','2013','优秀' union all
select 'B002','2013','合格'

----开始查询
---修改一下,汇总#tbKh表年度
;with cte(khnd) as(
select khnd from #tbKh group by khnd

select s.xm,s.xh,s.gzdw,z.khnd,z.khdc
from  #tbMain s cross join cte t        
left join #tbKh z on s.xh=z.xh and t.khnd=z.khnd
where s.gzdw='市招商局' and t.khnd='2013'
 

------解决方案--------------------

create table tbMain
(xm varchar(10),xh varchar(10),gzdw varchar(10))

insert into tbMain
 select '张三','A001','市招商局' union all
 select '李四','A002','市招商局' union all
 select '王五','B001','市教育局' union all
 select '张兵','B002','市教育局'

create table tbKh
(xh varchar(10),khnd varchar(10),khdc varchar(10))

insert into tbKh
 select 'A001','2012','优秀' union all
 select 'A002','2012','合格' union all
 select 'A001','2013','优秀' union all
 select 'B001','2012','优秀' union all
 select 'B002','2012','合格' union all
 select 'B001','2013','优秀' union all
 select 'B002','2013','合格'


select a.xm,a.xh,a.gzdw,b.khnd,b.khdc
from tbMain a
left join tbKh b on a.xh=b.xh and khnd='2013'
where a.gzdw='市招商局'

/*
xm         xh         gzdw       khnd       khdc
---------- ---------- ---------- ---------- ----------
张三         A001       市招商局       2013       优秀
李四         A002       市招商局       NULL       NULL

(2 row(s) affected)
*/
  相关解决方案