日期:2014-05-18 浏览次数:20472 次
--表A create table tab1(flag int , begin_datetime datetime, end_datetime datetime) insert into tab1 select 0, '2012-04-01 12:00','2012-04-01 13:25' union all select 1, '2012-04-01 13:25','2012-04-01 15:24' union all select 0, '2012-04-01 15:24','2012-04-01 16:20' create table tab2(d_datetime datetime, name_oid varchar(20)) insert into tab2 select '2012-04-01 12:00','124520' union all select '2012-04-01 12:01','2245454' union all select '2012-04-01 12:02','15454' union all --,... select '2012-04-01 13:25','121212' union all select '2012-04-01 13:26','454544' union all select '2012-04-01 13:27','1524541' union all --... select '2012-04-01 15:24','4415454' union all select '2012-04-01 15:26','454545' union all select '2012-04-01 16:00','45454' union all --.... select '2012-04-01 16:20','1245454' select * from tab1 --d_datetime name_oid flag --2012-04-01 12:00 124520 0 --2012-04-01 13:25 121212 1 --2012-04-01 13:26 454544 1 --2012-04-01 13"27 1524541 1 --2012-04-01 15:24 4415454 1 --2012-04-01 15:24 1245454 0 ;with cte as ( select d_datetime,name_oid,flag from tab2 t2 inner join tab1 t1 on t2.d_datetime=begin_datetime where t1.flag=0 union all select d_datetime,name_oid,1 from tab2 t2 where exists (select 1 from tab1 t1 where t2.d_datetime between begin_datetime and end_datetime and flag=1 ) ) select * from cte order by d_datetime /* d_datetime name_oid flag ----------------------- -------------------- ----------- 2012-04-01 12:00:00.000 124520 0 2012-04-01 13:25:00.000 121212 1 2012-04-01 13:26:00.000 454544 1 2012-04-01 13:27:00.000 1524541 1 2012-04-01 15:24:00.000 4415454 0 2012-04-01 15:24:00.000 4415454 1 (6 行受影响) */