当前位置: 代码迷 >> Sql Server >> Sql server 同一时间段内相同项重复数据,该怎么解决
  详细解决方案

Sql server 同一时间段内相同项重复数据,该怎么解决

热度:103   发布时间:2016-04-27 19:11:49.0
Sql server 同一时间段内相同项重复数据
比如 有表如下
姓名,培训项目名称,培训地点,开始日期,开始时间,结束日期,结束时间
-----------------------------
张三,公务培训1,北京,2011-01-03,9,2009-01-09,17
李四,公务培训1,北京,2011-01-03,9,2009-01-09,17
王五,公务培训1,北京,2011-01-03,9,2009-01-09,17
赵六,公务培训1,北京,2011-01-03,9,2009-01-09,17
张三,公务培训2,上海,2011-01-04,9,2009-01-06,16
王五,公务培训3,南京,2011-01-05,9,2009-01-10,11
王五,公务培训4,济南,2011-01-07,9,2009-01-10,17
张三,公务培训5,杭州,2011-01-06,9,2009-01-06,16
张三,公务培训6,苏州,2011-01-09,9,2009-01-16,17

求:相同人员在同一时间段参加不同的培训记录

输出结果如下:
-----------------------------
张三,公务培训1,北京,2011-01-03,9,2009-01-09,17
张三,公务培训2,上海,2011-01-04,9,2009-01-06,16
张三,公务培训5,杭州,2011-01-06,9,2009-01-06,16
张三,公务培训6,苏州,2011-01-09,9,2009-01-16,17
王五,公务培训1,北京,2011-01-03,9,2009-01-09,17
王五,公务培训3,南京,2011-01-05,9,2009-01-10,11
王五,公务培训4,济南,2011-01-07,9,2009-01-10,17

能否精确到开始时间,结束时间














------解决方案--------------------
SQL code
create table tb(姓名 nvarchar(10),培训项目名称 nvarchar(10),培训地点 nvarchar(10),开始日期 datetime,开始时间 int,结束日期 datetime,结束时间 int)insert into tb select '张三','公务培训','北京','2009-01-03',9,'2009-01-09',17insert into tb select '李四','公务培训','北京','2011-01-03',9,'2011-01-09',17insert into tb select '王五','公务培训1','北京','2011-01-03',9,'2011-01-09',17insert into tb select '赵六','公务培训1','北京','2011-01-03',9,'2011-01-09',17insert into tb select '张三','公务培训','上海','2011-01-04',9,'2011-01-06',16insert into tb select '王五','公务培训3','南京','2011-01-05',9,'2011-01-10',11insert into tb select '王五','公务培训4','济南','2011-01-07',9,'2011-01-10',17insert into tb select '张三','公务培训','杭州','2011-01-06',9,'2011-01-06',16insert into tb select '张三','公务培训6','苏州','2011-01-09',9,'2011-01-16',17--insert into tb select '张三','公务培训7','天津','2011-01-20',9,'2011-01-20',17goselect * from tb awhere 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 行受影响)*/godrop table tb
  相关解决方案