| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 766 人关注过本帖
标题:[求助]我觉得是老难了 (建立索引字段,不管什么方法都行啊)
只看楼主 加入收藏
thjaxd
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2006-5-16
收藏
 问题点数:0 回复次数:5 
[求助]我觉得是老难了 (建立索引字段,不管什么方法都行啊)

各位大侠
小弟遇到个难题,希望帮助解决一下
有一数据库字段为
zh(证号),name(姓名),nd(年度),grj(个人账户)
里面的数据我可以举个例子(不会描述)
000003 张三 1992 122.5
000003 张三 1993 598
000003 张三 1994 800.5



000003 张三 2002 300.8(这条记录为在别的单位的账户)
000003 张三 2002 600.9(这条及其他条记录为在我单位的账户)
000003 张三 2003 1100
000003 张三 2004 1800.8
000003 张三 2005 800.5


000004 李四 1992 122.5
000004 李四 1993 598
000004 李四 1994 800.5



000004 李四 2002 300.8(这条记录为在别的单位的账户)
000004 李四 2002 600.9(这条及其他条记录为在我单位的账户)
000004 李四 2003 1100
000004 李四 2004 1800.8
000004 李四 2005 800.5



表里面有几千人都是这样的数据。
我想编一个字段id(索引字段)为这样的数据
id zh name nd grj
0000030001 000003 张三 1992 122.5
0000030002 000003 张三 1993 598
0000030003 000003 张三 1994 800.5



0000030011 000003 张三 2002 300.8(这条记录为在别的单位的账户)
0000030012 000003 张三 2002 600.9(这条及其他条记录为在我单位的账户)
0000030013 000003 张三 2003 1100
0000030014 000003 张三 2004 1800.8
0000030015 000003 张三 2005 800.5


0000040001 000004 李四 1992 122.5
0000040002 000004 李四 1993 598
0000040003 000004 李四 1994 800.5



0000040011 000004 李四 2002 300.8
0000040012 000004 李四 2003 1100
0000040013 000004 李四 2004 1800.8
0000040014 000004 李四 2005 800.5


说白了就是每个人的账户情况按照nd 字段排列得到序列号(从1往下排,不管哪一年有没有两条记录),然后
id 字段就等于zh+序列号
如果所有人都像 李四 这样的账户,我就好办了,
update zh3 set id=zh+'0001' where nd='1992'
update zh3 set id=zh+'0002' where nd='1993'......就可以搞定了
关键表里面有一些人像 张三 那样的账户,一年中有两条记录,用上面的方法2002年的两条记录 id 又重复了.
苦恼,困惑,迷茫,失落。
望各位多多帮忙,谢谢。

可以把表拆成92年一个表,93年一个表等等,然后合在一起都可以,只要能达到目的。

[此贴子已经被作者于2007-6-7 0:38:27编辑过]

搜索更多相关主题的帖子: 字段 索引 
2007-06-07 00:26
thjaxd
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2006-5-16
收藏
得分:0 
能不能实现?高手指点一下啊,谢谢了

强中手中自还有强中手,向强中手学习,致敬!
2007-06-07 11:13
songyang201
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2007-6-5
收藏
得分:0 

if exists(select * from sysobjects where xtype='u' and name='A') drop table A
create table A(id char(10),zh char(6),name char(10),nd char(10),grj float)

--go

declare @id char(10)
declare @zh char(6)
declare @name char(10)
declare @nd char(10)
declare @grj float
declare @tag char(4)
declare @num int
declare @count int
declare @nowcount int

set @nowcount=0
set @num=0


declare mycur cursor for

select zh,name,nd,grj from AAA order by zh,nd

open mycur

fetch next from mycur
into @zh,@name,@nd,@grj

while @@FETCH_STATUS = 0
begin

if @nowcount=0
begin
set @nowcount=1
select @count=count(*) from AAA where zh=@zh
end

if @num<@count
begin
set @num=@num+1
set @id=@zh+right('000'+cast(@num as varchar),4)
end
else
begin
set @nowcount=0
set @num=1
set @id=@zh+right('000'+cast(@num as varchar),4)
end

insert into A values(@id,@zh,@name,@nd,@grj)

fetch next from mycur
into @zh,@name,@nd,@grj
end

close mycur

deallocate mycur


把里面的表改一下子,应该可以用的吧,而且不用分年份,就算同一年有N个重复的也可以实现~~

[此贴子已经被作者于2007-6-7 13:25:46编辑过]

2007-06-07 13:24
thjaxd
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2006-5-16
收藏
得分:0 
回复:(songyang201)if exists(select * from sysob...
非常感谢,致敬!
真的不知道如何感谢了,我还没有试过,好厉害啊,好多我没见过的语句,我套到我的表里是一下 啊
不明白的我再来请教你.
写到查询分析器里面就可以了是吧.

强中手中自还有强中手,向强中手学习,致敬!
2007-06-07 14:32
thjaxd
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2006-5-16
收藏
得分:0 

问题解决,感谢,致敬,完美的答案!


强中手中自还有强中手,向强中手学习,致敬!
2007-06-07 22:09
独舞
Rank: 2
等 级:新手上路
威 望:3
帖 子:241
专家分:0
注 册:2007-5-23
收藏
得分:0 
有高手

The G
2007-06-10 13:22
快速回复:[求助]我觉得是老难了 (建立索引字段,不管什么方法都行啊)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015303 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved