create table #t1 (name nvarchar(50),age int,sex nvarchar(50),ruxuedate datetime,tuixuedate datetime);
insert into #t1
select '张三',11,'男','2014-01-29','2014-02-15'
union all
select '李四',12,'女','2014-02-15','2014-03-18'
union all
select '王五',13,'女','2014-03-01','2014-03-05';
go
create table #t2 (name nvarchar(50),age int,sex nvarchar(50),ruxuedate datetime,tuixuedate datetime);
insert into #t2
select '张三',11,'男','2014-01-30','2014-02-13'
union all
select '李四',12,'女','2014-3-18','2014-03-20'
union all
select '王五',13,'女','2014-03-06','2014-03-15';
go
t1
姓名 | 年龄 | 性别 | 入学日期 | 毕业日期 |
张三 | 11 | 男 |
2014-01-29
|
2014-02-15
|
李四 | 12 | 女 |
2014-02-15
|
2014-03-18
|
王五 | 13 | 女 | 2014-03-01 | 2014-03-05 |
t2
姓名 | 年龄 | 性别 | 入学日期 | 毕业日期 |
张三 | 11 | 男 |
2014-01-30
|
2014-02-13
|
李四 | 12 | 女 |
2014-3-18
|
2014-03-20
|
王五 | 13 | 女 | 2014-03-06 | 2014-03-15 |
想显示结果如下,判断条件(t2.入学日期<=t1.毕业日期 && t2.毕业日期>=t1.入学日期 就算重叠):
张三,11,男 日期有重叠
李四,12,女 日期有重叠
请问大家用sql如何实现?谢谢~~
思路反一下,不重叠的是什么情况?比如A跟B,不重叠就是A的开始时间比B的结束时间还大,或者反过来B的开始时间比A的结束时间还大,当然,首先要确定,每个人的结束时间都在开始时间之后。。。
是的呢,王五的情况就是不重叠的
咦 , 又是你啊 ,朋友, 这个问题能帮解决下吗 (*^__^*)
@宋小熊: 你数据都列出来了,还不简单吗???
select t1.姓名,t1.年龄,t1.性别 from t2 join t1 on t2.姓名=t1.姓名
where not (t1.开始时间>t2.结束时间) or (t2.开始时间>t1.结束时间)
如果想把“是否有重叠”这一列加进去,就用case when搞定就行了。。。
@顾晓北:
帮忙看下是这样吗 ?
select #t1.name,#t1.age,#t1.sex,case when #t2.ruxuedate<=#t1.tuixuedate and #t1.tuixuedate>=#t2.ruxuedate then '重叠'
else '不重叠' end
from #t2 join #t1 on #t2.name=#t1.name
and #t2.age=#t1.age
and #t2.sex=#t1.sex
where not (#t1.ruxuedate>#t2.tuixuedate) or (#t2.ruxuedate>#t1.tuixuedate)
@宋小熊: 我语句都给你写出来了,你自己理解吧,只能帮你到这儿了。。。
再说了,是不是,你自己试一下就行了嘛。
@顾晓北: 不太明白为什么 要加where not
如果用case when 的话直接就可以判断, 为什么还要加where not
@宋小熊: 。。。不加where not就是查询所有,刚开始我还以为你只筛选出重叠的,后来看到你是要查出所有,新增一列,就case when就行。。。
--,判断条件(t2.入学日期<=t1.毕业日期 && t2.毕业日期>=t1.入学日期 就算重叠): select t1.name, t1.age, t1.sex, case when t2.ruxuedate<=t1.tuixuedate and t2.tuixuedate>=t1.ruxuedate then N'有重叠' else N'无重叠' end as IsOverlap from #t1 as t1 inner join #t2 t2 on t1.name=t2.name and t1.age=t2.age and t1.sex=t2.sex