22,209
社区成员
发帖
与我相关
我的任务
分享
create table tb(姓名 nvarchar(10),培训项目名称 nvarchar(10),培训地点 nvarchar(10),开始日期 datetime,开始时间 int,结束日期 datetime,结束时间 int)
insert into tb select '张三','公务培训','北京','2009-01-03',9,'2009-01-09',17
insert into tb select '李四','公务培训','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '王五','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '赵六','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '张三','公务培训','上海','2011-01-04',9,'2011-01-06',16
insert into tb select '王五','公务培训3','南京','2011-01-05',9,'2011-01-10',11
insert into tb select '王五','公务培训4','济南','2011-01-07',9,'2011-01-10',17
insert into tb select '张三','公务培训','杭州','2011-01-06',9,'2011-01-06',16
insert into tb select '张三','公务培训6','苏州','2011-01-09',9,'2011-01-16',17
--insert into tb select '张三','公务培训7','天津','2011-01-20',9,'2011-01-20',17
go
select * from tb a
where exists(select 1 from tb where 姓名=a.姓名 and (培训项目名称<>a.培训项目名称 or 培训地点<>a.培训地点)
and (dateadd(hh,a.开始时间,a.开始日期) between dateadd(hh,开始时间,开始日期) and dateadd(hh,结束时间,结束日期)
or dateadd(hh,a.结束时间,a.结束日期) between dateadd(hh,开始时间,开始日期) and dateadd(hh,结束时间,结束日期)
or (dateadd(hh,a.开始时间,a.开始日期)<dateadd(hh,开始时间,开始日期) and dateadd(hh,a.结束时间,a.结束日期)>dateadd(hh,开始时间,开始日期))))
order by 姓名
/*
姓名 培训项目名称 培训地点 开始日期 开始时间 结束日期 结束时间
---------- ---------- ---------- ----------------------- ----------- ----------------------- -----------
王五 公务培训1 北京 2011-01-03 00:00:00.000 9 2011-01-09 00:00:00.000 17
王五 公务培训3 南京 2011-01-05 00:00:00.000 9 2011-01-10 00:00:00.000 11
王五 公务培训4 济南 2011-01-07 00:00:00.000 9 2011-01-10 00:00:00.000 17
张三 公务培训 杭州 2011-01-06 00:00:00.000 9 2011-01-06 00:00:00.000 16
张三 公务培训 上海 2011-01-04 00:00:00.000 9 2011-01-06 00:00:00.000 16
(5 行受影响)
*/
go
drop table tb
create table tb(姓名 nvarchar(10),培训项目名称 nvarchar(10),培训地点 nvarchar(10),开始日期 datetime,开始时间 int,结束日期 datetime,结束时间 int)
insert into tb select '张三','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '李四','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '王五','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '赵六','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '张三','公务培训2','上海','2011-01-04',9,'2011-01-06',16
insert into tb select '王五','公务培训3','南京','2011-01-05',9,'2011-01-10',11
insert into tb select '王五','公务培训4','济南','2011-01-07',9,'2011-01-10',17
insert into tb select '张三','公务培训5','杭州','2011-01-06',9,'2011-01-06',16
insert into tb select '张三','公务培训6','苏州','2011-01-09',9,'2011-01-16',17
select a.*
from tb a
inner join tb b on a.姓名=b.姓名
and a.培训项目名称<>b.培训项目名称
and a.开始日期 between b.开始日期 and b.结束日期
order by a.姓名 desc,a.培训项目名称
姓名 培训项目名称 培训地点 开始日期 开始时间 结束日期 结束时间
---------- ---------- ---------- ----------------------- ----------- ----------------------- -----------
张三 公务培训2 上海 2011-01-04 00:00:00.000 9 2011-01-06 00:00:00.000 16
张三 公务培训5 杭州 2011-01-06 00:00:00.000 9 2011-01-06 00:00:00.000 16
张三 公务培训5 杭州 2011-01-06 00:00:00.000 9 2011-01-06 00:00:00.000 16
张三 公务培训6 苏州 2011-01-09 00:00:00.000 9 2011-01-16 00:00:00.000 17
王五 公务培训3 南京 2011-01-05 00:00:00.000 9 2011-01-10 00:00:00.000 11
王五 公务培训4 济南 2011-01-07 00:00:00.000 9 2011-01-10 00:00:00.000 17
王五 公务培训4 济南 2011-01-07 00:00:00.000 9 2011-01-10 00:00:00.000 17
(7 row(s) affected)
create table tb(姓名 nvarchar(10),培训项目名称 nvarchar(10),培训地点 nvarchar(10),开始日期 datetime,开始时间 int,结束日期 datetime,结束时间 int)
insert into tb select '张三','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '李四','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '王五','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '赵六','公务培训1','北京','2011-01-03',9,'2011-01-09',17
insert into tb select '张三','公务培训2','上海','2011-01-04',9,'2011-01-06',16
insert into tb select '王五','公务培训3','南京','2011-01-05',9,'2011-01-10',11
insert into tb select '王五','公务培训4','济南','2011-01-07',9,'2011-01-10',17
insert into tb select '张三','公务培训5','杭州','2011-01-06',9,'2011-01-06',16
insert into tb select '张三','公务培训6','苏州','2011-01-09',9,'2011-01-16',17
go
select * from tb a
where exists(select 1 from tb where 姓名=a.姓名 and 培训项目名称<>a.培训项目名称
and (dateadd(hh,a.开始时间,a.开始日期) between dateadd(hh,开始时间,开始日期) and dateadd(hh,结束时间,结束日期)
or dateadd(hh,a.结束时间,a.结束日期) between dateadd(hh,开始时间,开始日期) and dateadd(hh,结束时间,结束日期)
or (dateadd(hh,a.开始时间,a.开始日期)<dateadd(hh,开始时间,开始日期) and dateadd(hh,a.结束时间,a.结束日期)>dateadd(hh,开始时间,开始日期))))
/*
姓名 培训项目名称 培训地点 开始日期 开始时间 结束日期 结束时间
---------- ---------- ---------- ----------------------- ----------- ----------------------- -----------
张三 公务培训1 北京 2011-01-03 00:00:00.000 9 2011-01-09 00:00:00.000 17
王五 公务培训1 北京 2011-01-03 00:00:00.000 9 2011-01-09 00:00:00.000 17
张三 公务培训2 上海 2011-01-04 00:00:00.000 9 2011-01-06 00:00:00.000 16
王五 公务培训3 南京 2011-01-05 00:00:00.000 9 2011-01-10 00:00:00.000 11
王五 公务培训4 济南 2011-01-07 00:00:00.000 9 2011-01-10 00:00:00.000 17
张三 公务培训5 杭州 2011-01-06 00:00:00.000 9 2011-01-06 00:00:00.000 16
张三 公务培训6 苏州 2011-01-09 00:00:00.000 9 2011-01-16 00:00:00.000 17
(7 行受影响)
*/
go
drop table tb