请问如何把这三个表的数据联合起来

robin112cn 2007-12-13 02:35:50
表A

员工 部门 迟到次数
A a 3
B b 4
C c 5


表B

员工 部门 请假次数
B b 3
C c 2


表C

员工 部门 早退次数
C c 5
D d 1



我现在想写一个视图 达到如下效果


员工 部门 迟到 请假 早退
A a 3 0 0
B d 4 3 0
C c 5 2 5
D d 0 0 1



请问各位如何实现
...全文
81 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
robin112cn 2007-12-13
非常感谢楼上各位

呵呵
  • 打赏
  • 举报
回复
daviszr_1979 2007-12-13
select Case When a.员工 is not null Then a.员工  
When b.员工 is not null Then b.员工
When c.员工 is not null Then C.员工
End As 员工,
isnull(isnull(a.部门,b.部门),c.部门) 部门 ,
isnull(a.迟到次数 , 0) 迟到次数 ,
isnull(b.请假次数 , 0) 请假次数 ,
isnull(c.早退次数 , 0) 早退次数
from A
full join B on A.员工 = B.员工
full join C on A.员工 = C.员工
  • 打赏
  • 举报
回复
-狙击手- 2007-12-13
declare @ta table(员工 char(1), 部门  char(2),迟到次数  int)
insert @ta select 'A','a', 3
insert @ta select 'B','b', 4
insert @ta select 'C','c', 5

declare @tb table(员工 char(1), 部门 char(2),请假次数 int)
insert @tb select 'B','b', 3
insert @tb select 'C','c', 2

declare @tc table(员工 char(1), 部门 char(2),早退次数 int)

insert @tc select 'C','c', 5
insert @tc select 'D','d', 1


/*
员工 部门 迟到 请假 早退
A', a 3 0 0
B', d 4 3 0
C', c 5 2 5
D', d 0 0 1

*/

select distinct isnull(isnull(a.员工,b.员工),c.员工) as 员工,
isnull(isnull(a.部门,b.部门),c.部门) as 部门,
[迟到] = isnull(a.迟到次数,0),
[请假] = isnull(b.请假次数,0)
,[早退] = isnull(c.早退次数,0)
from @ta a
full join @tb b on a.员工 = b.员工
full join @tc c on a.员工 = c.员工

/*
员工 部门 迟到 请假 早退
---- ---- ----------- ----------- -----------
A a 3 0 0
B b 4 3 0
C c 5 2 5
D d 0 0 1

(所影响的行数为 4 行)
*/
  • 打赏
  • 举报
回复
dobear_0922 2007-12-13
借用下龟兄的数据,,,
create table A(员工 varchar(10), 部门 varchar(10), 迟到次数 int)
insert into A values('A', 'a', 3 )
insert into A values('B', 'b', 4 )
insert into A values('C', 'c', 5 )
create table B(员工 varchar(10), 部门 varchar(10), 请假次数 int)
insert into B values('B', 'b', 3 )
insert into B values('C', 'c', 2 )
create table C(员工 varchar(10), 部门 varchar(10), 早退次数 int)
insert into C values('C', 'c', 5 )
insert into C values('D', 'd', 1 )
go


select 员工=coalesce(A.员工, B.员工, C.员工)
,部门=coalesce(A.部门, B.部门, C.部门)
,迟到=isnull(迟到次数,0)
,请假=isnull(请假次数,0)
,早退=isnull(早退次数,0)
from A full join B on A.员工=B.员工
full join C on A.员工=C.员工 or B.员工=C.员工

drop table A,B,C

/*
员工 部门 迟到 请假 早退
---------- ---------- ----------- ----------- -----------
A a 3 0 0
B b 4 3 0
C c 5 2 5
D d 0 0 1

(4 row(s) affected)

*/
  • 打赏
  • 举报
回复
dawugui 2007-12-13
create table A(员工 varchar(10), 部门 varchar(10), 迟到次数 int)
insert into A values('A', 'a', 3 )
insert into A values('B', 'b', 4 )
insert into A values('C', 'c', 5 )
create table B(员工 varchar(10), 部门 varchar(10), 请假次数 int)
insert into B values('B', 'b', 3 )
insert into B values('C', 'c', 2 )
create table C(员工 varchar(10), 部门 varchar(10), 早退次数 int)
insert into C values('C', 'c', 5 )
insert into C values('D', 'd', 1 )
go

select isnull(isnull(a.员工,b.员工),c.员工) 员工 ,
isnull(isnull(a.部门,b.部门),c.部门) 部门 ,
isnull(a.迟到次数 , 0) 迟到次数 ,
isnull(b.请假次数 , 0) 请假次数 ,
isnull(c.早退次数 , 0) 早退次数
from A
full join B on A.员工 = B.员工
full join C on A.员工 = C.员工

drop table A,B,C

/*
员工 部门 迟到次数 请假次数 早退次数
---------- ---------- ----------- ----------- -----------
A a 3 0 0
B b 4 3 0
C c 5 2 5
D d 0 0 1

(所影响的行数为 4 行)
*/
  • 打赏
  • 举报
回复
dobear_0922 2007-12-13
--try
select 员工=coalesce(A.员工, B.员工, C.员工)
,部门=coalesce(A.部门, B.部门, C.部门)
,迟到=isnull(迟到次数,0)
,请假=isnull(请假次数,0)
,早退=isnull(早退次数,0)
from A full join B on A.员工=B.员工
full join C on A.员工=C.员工 or B.员工=C.员工
  • 打赏
  • 举报
回复
dawugui 2007-12-13
select isnull(isnull(a.员工,b.员工),c.员工) 员工 , 
isnull(isnull(a.部门,b.部门),c.部门) 部门 ,
isnull(a.迟到次数 , 0) 迟到次数 ,
isnull(b.请假次数 , 0) 请假次数 ,
isnull(c.早退次数 , 0) 早退次数
from A
full join B on A.员工 = B.员工
full join C on A.员工 = C.员工

  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2007-12-13 02:35
社区公告
暂无公告