本帖最后由 qinw2007 于 2011-11-27 17:22:50 编辑

解决方案 »

  1.   

    亲:
    我上次给你的查询语句能准确查出来的.
    你的这次数据比较乱,但有一点你没说明白,那就是,相同的培训项目名称,但地点不同,就算不同的培训.
    另外,你仔细瞧瞧,你上面结果中的张三公务培训6,并没有与上面有冲突时间哪,上面的时间都是在9号前的!
    按你的要求,把上次帖子的语句改了一下,请及时结帖哦!
    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
      

  2.   

    qianjin036a:
    培训项目名称、培训地点能否不考虑,有可能相同
      

  3.   


    那把这一段去掉就行了:
     and (培训项目名称<>a.培训项目名称 or 培训地点<>a.培训地点)