declare @表1 table ( 培训ID int,培训课程代码 varchar(3), 开始日期 varchar(10),结束日期 varchar(10), 学时 int,老师 varchar(2), 培训地点 varchar(6),是否周末 varchar(2) ) insert into @表1 select 1,'001','2012-01-01','2012-01-08',5,'01','会议室','是' union all select 2,'002','2012-01-01','2012-01-08',6,'01','会议室','是' union all select 3,'003','2012-01-01','2012-01-08',7,'02','会议室','否' union all select 4,'004','2012-01-01','2012-01-08',8,'03','会议室','否'declare @表3 table ( 老师代码 varchar(2), 老师名字 varchar(6) ) insert into @表3 select '01','张三' union all select '02','李四' union all select '03','王五'select 老师名字,常规课时,周末课程 from ( select null as 常规课时,培训课程代码 as 周末课程,老师 from @表1 where 是否周末='是' union all select 培训课程代码 ,null,老师 from @表1 where 是否周末='否' ) aa left join @表3 bb on aa.老师=bb.老师代码 /* 老师名字 常规课时 周末课程 ------ ---- ---- 张三 NULL 001 张三 NULL 002 李四 003 NULL 王五 004 NULL */
select 表3.老师名字, case when 是否周末=是 then 表1.学时 end, case when 是否周末=否 then 表1.学时 end from 表1,表3 where 表1.老师代码=表3.老师代码
这是个三表连接问题,select 你所需要的标识列 from 表1 inner join 表2 on 相同的属性 inner join 表3 on 相同的属性 如有需要后还可以加where 条件语句
declare @表1 table
(
培训ID int,培训课程代码 varchar(3),
开始日期 varchar(10),结束日期 varchar(10),
学时 int,老师 varchar(2),
培训地点 varchar(6),是否周末 varchar(2)
)
insert into @表1
select 1,'001','2012-01-01','2012-01-08',5,'01','会议室','是' union all
select 2,'002','2012-01-01','2012-01-08',6,'01','会议室','是' union all
select 3,'003','2012-01-01','2012-01-08',7,'02','会议室','否' union all
select 4,'004','2012-01-01','2012-01-08',8,'03','会议室','否'declare @表3 table
(
老师代码 varchar(2),
老师名字 varchar(6)
)
insert into @表3
select '01','张三' union all
select '02','李四' union all
select '03','王五'select 老师名字,常规课时,周末课程 from
(
select null as 常规课时,培训课程代码 as 周末课程,老师
from @表1 where 是否周末='是'
union all
select 培训课程代码 ,null,老师 from @表1 where 是否周末='否'
) aa
left join @表3 bb on aa.老师=bb.老师代码
/*
老师名字 常规课时 周末课程
------ ---- ----
张三 NULL 001
张三 NULL 002
李四 003 NULL
王五 004 NULL
*/
表3.老师名字,
case when 是否周末=是 then 表1.学时 end,
case when 是否周末=否 then 表1.学时 end
from 表1,表3
where 表1.老师代码=表3.老师代码