有两张表
第一张表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相同的才能赋
第一张表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相同的才能赋
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 行)**/
not exists(select 1 from table2 where table1id=t.table1id and 录入日期>t.录入日期)
为什么还要判断一下.有这个判断和没有这个判断有什么区别
这个要判断,它的作用是:如果一个table1id存在两个不为null的日期,取最大的日期