首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

急1,该怎么处理

2012-03-09 
急!!!!!1表A:busdateiddeptcodecode------------------------------------------------------------------

急!!!!!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
*/

热点排行