有两张表 
第一张表table1 只有一个字段 
ID 
10 
11 第二张表 table2 
ID table1ID 姓名 年龄  录入日期      性别 
2    10      小  5    2009-01-02    男 
3    10      null null  null          null 
4    11      工  10    2007-05-02    女 
5    11      null null  null          null 
如:当遇到数据为null时根据table1ID相同的时间最大的一条取出来.赋值给null.完成后的效果 ID table1ID 姓名 年龄  录入日期      性别 
2    10      小  5    2009-01-02    男 
3    10      小  5    2009-01-02    男 
4    11      工  10    2007-05-02    女 
5    11      工  10    2007-05-02    女 
注:table1ID相同的才能赋

解决方案 »

  1.   

    if object_id('[table1]') is not null drop table [table1]
    go
    create table [table1]([ID] int)
    insert [table1]
    select 10 union all
    select 11
    if object_id('[table2]') is not null drop table [table2]
    go
    create table [table2] (ID int,table1ID int,姓名 varchar(2),年龄 int,录入日期 datetime,性别 varchar(2))
    insert into [table2]
    select 2,10,'小',5,'2009-01-02','男' union all
    select 3,10,null,null,null,null union all
    select 4,11,'工',10,'2007-05-02','女' union all
    select 5,11,null,null,null,nullupdate a
    set a.姓名=isnull(a.姓名,b.姓名),
        a.年龄=isnull(a.年龄,b.年龄),
        a.录入日期=isnull(a.录入日期,b.录入日期),
        a.性别=isnull(a.性别,b.性别)
    from table2 a
    join
    (
    select * from table2 t 
    where 录入日期 is not null
    and not exists(select 1 from table2 where table1id=t.table1id and 录入日期>t.录入日期)
    ) b
    on a.table1id=b.table1id
    join table1 c on a.table1id=c.idselect * from table2
    /**
    ID          table1ID    姓名   年龄          录入日期                                                   性别   
    ----------- ----------- ---- ----------- ------------------------------------------------------ ---- 
    2           10          小    5           2009-01-02 00:00:00.000                                男
    3           10          小    5           2009-01-02 00:00:00.000                                男
    4           11          工    10          2007-05-02 00:00:00.000                                女
    5           11          工    10          2007-05-02 00:00:00.000                                女(所影响的行数为 4 行)**/
      

  2.   

    是的.但是这句我还是没懂
    not exists(select 1 from table2 where table1id=t.table1id and 录入日期>t.录入日期)
    为什么还要判断一下.有这个判断和没有这个判断有什么区别
      

  3.   


    这个要判断,它的作用是:如果一个table1id存在两个不为null的日期,取最大的日期