查询条件为:
1.比较a,b表内c_date哪边日期大就取哪边;
2.如果a表有的行b表没有,那么就取出a表那条create table #a
(
id int,
name char(20),
c_date datetime
)
create table #b
(
id int,
name char(20),
c_date datetime
)insert into #a
select 1,'Decher','2012-04-11' union
select 2,'Quick','2012-04-10' union
select 3,'Ben','2012-04-01'

insert into #b
select 2,'Quick123','2012-04-30'
select 3,'Ben123','2012-06-01'create table #temp 
(
id int,
name char(20),
c_date datetime,
[type] char(1)
)insert into #temp
select a.* , 'a' [type] from #a a left join  #b b
on a.id = b.id  and a.c_date > b.c_date
union
select b.* , 'b' [type] from #a a , #b b
where a.id = b.id and a.c_date < b.c_dateselect * from #temp
/*
--期待结果为:
id          name                 c_date                  type
----------- -------------------- ----------------------- ----
1           Decher               2012-04-11 00:00:00.000 a
2           Quick                2012-04-10 00:00:00.000 a
3           Ben123               2012-06-01 00:00:00.000 b
*/

解决方案 »

  1.   

    insert into #b
        select 2,'Quick123','2012-04-30' union
        select 3,'Ben123','2012-06-01'
    --上面少写一个union select a.id ,
      case when a.c_date > b.c_date then a.name else case when b.c_date is null then a.name else b.name end end [name],
     case when a.c_date > b.c_date then a.c_date else isnull(b.c_date,a.c_date) end c_date,
     case when a.c_date > b.c_date then 'a' else case when b.c_date is null then 'a' else 'b' end end [type]
      from #a a full join  #b b
        on a.id = b.id