急!!!!!1
表A:
busdate id deptcode code
---------- -------------------- ----------------- --------------------
2007.08.01 蒋陆英 03069643 0 0
2007.08.01 蒋陆英 02995694 96 668
2007.08.01 蒋陆英 03112860 96 668
2007.08.01 朱炳荣 03108786 0 0
2007.08.21 朱炳荣 03176511 64 1461
2007.08.02 蒋建成 03069717 0 0
2007.08.02 蒋建成 03069716 146 746
2007.08.03 钟小平 03069896 0 0
2007.08.03 钟小平 03069896 0 0
2007.08.05 钟小平 03160200 65 1579
将deptcode,code为0的数据更新为同一个人名的deptcode,code(并且不能为0). 请各位大大帮忙.
id 包括(蒋陆英 03069643 ),当然有可能 同一个人的deptcode,code不只是一个,只要求选择(日期最大的一个数据的deptcode,code).
[解决办法]
--加上前缀就可以了,如:
update 数据库A.dbo.表A set
deptcode=(select top 1 deptcode from 数据库A.dbo.表A where deptcode <> 0 and code <> 0 and id=t.id order by busdate desc),
code=(select top 1 code from 数据库A.dbo.表A where deptcode <> 0 and code <> 0 and id=t.id order by busdate desc)
from 数据库A.dbo.表A as T
where deptcode=0 and code=0
就是符合这种格式进行访问:
数据库名.dbo.表名
[解决办法]
--原始数据:@A
declare @A table(busdate datetime,id varchar(20),deptcode int,code int)
insert @A
select '2007.08.01 ', '蒋陆英 03069643 ',0,0 union all
select '2007.08.01 ', '蒋陆英 02995694 ',96,668 union all
select '2007.08.01 ', '蒋陆英 03112860 ',96,668 union all
select '2007.08.01 ', '朱炳荣 03108786 ',0,0 union all
select '2007.08.21 ', '朱炳荣 03176511 ',64,1461 union all
select '2007.08.02 ', '蒋建成 03069717 ',0,0 union all
select '2007.08.02 ', '蒋建成 03069716 ',146,746 union all
select '2007.08.03 ', '钟小平 03069896 ',0,0 union all
select '2007.08.03 ', '钟小平 03069896 ',0,0 union all
select '2007.08.05 ', '钟小平 03160200 ',65,1579
update a set a.deptcode=b.deptcode,a.code=b.code
from @A a join @A b
on left(a.id,patindex( '%[0-9]% ',a.id)-1)=left(b.id,patindex( '%[0-9]% ',b.id)-1)
where
a.deptcode=0 and a.code=0 and
b.deptcode <> 0 and b.code <> 0 and
b.busdate=(select max(busdate) from @A where left(id,patindex( '%[0-9]% ',id)-1)=left(b.id,patindex( '%[0-9]% ',b.id)-1))
select * from @A
/*
busdate id deptcode code
2007-08-01 00:00:00.000 蒋陆英 03069643 96 668
2007-08-01 00:00:00.000 蒋陆英 02995694 96 668
2007-08-01 00:00:00.000 蒋陆英 03112860 96 668
2007-08-01 00:00:00.000 朱炳荣 03108786 64 1461
2007-08-21 00:00:00.000 朱炳荣 03176511 64 1461
2007-08-02 00:00:00.000 蒋建成 03069717 146 746
2007-08-02 00:00:00.000 蒋建成 03069716 146 746
2007-08-03 00:00:00.000 钟小平 03069896 65 1579
2007-08-03 00:00:00.000 钟小平 03069896 65 1579
2007-08-05 00:00:00.000 钟小平 03160200 65 1579
*/