| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 834 人关注过本帖
标题:求高手指教编程实现序号递增问题
只看楼主 加入收藏
wjp456789
Rank: 5Rank: 5
来 自:四川成都
等 级:职业侠客
威 望:1
帖 子:345
专家分:330
注 册:2012-6-25
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:13 
求高手指教编程实现序号递增问题
我有一个表。里面有一个字段。有很多重复数据。
现在需要将重复数据筛选出来。并且对重复数据的序号在同一类数据的最大号的基础上进行递增。比如
图片附件: 游客没有浏览图片的权限,请 登录注册

数据如下

aaa123.rar (99.67 KB)



[ 本帖最后由 wjp456789 于 2012-12-19 23:56 编辑 ]
搜索更多相关主题的帖子: 编程 
2012-12-19 23:37
wjp456789
Rank: 5Rank: 5
来 自:四川成都
等 级:职业侠客
威 望:1
帖 子:345
专家分:330
注 册:2012-6-25
收藏
得分:0 
因为重复字段还对应有其他数据。所以编号唯一的地方不得换编号。只是对重号的编号进行递增。

[ 本帖最后由 wjp456789 于 2012-12-19 23:57 编辑 ]

我是来向高手学习的!
2012-12-19 23:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1.你如何确保递增的区间不侵犯到下面的部分?
2.你图中右侧那些目标编号,为何是跳跃性的?101010001,下面怎么跳跃到101010011?101010010怎么跳到101010015?对前者,连排序的顺序都变了,是希望的结果吗?

[ 本帖最后由 TonyDeng 于 2012-12-20 01:27 编辑 ]

授人以渔,不授人以鱼。
2012-12-20 01:26
wjp456789
Rank: 5Rank: 5
来 自:四川成都
等 级:职业侠客
威 望:1
帖 子:345
专家分:330
注 册:2012-6-25
收藏
得分:0 
可能图片上有点错误,本来是想帮别人解决问题,结果自己不能完全解决问题,就上来求救了。T版说的那好象是有点问题。应该是跳到14



编号是分了几个区间
在每一个区间内。对重号进行重新编排,按现有的顺序,保留第一个重号,其他重号在本区间内,在已有的最大值上面加1.

如果要排序。应该把所有重号重新编号后才排序。现在不急于排序。

不知道我表述清楚没有。

[ 本帖最后由 wjp456789 于 2012-12-20 08:55 编辑 ]

我是来向高手学习的!
2012-12-20 08:51
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
最后的重复编号101020110为什么不改为101020111,而要改成101020133?是以前面6位数为基数来推算当前最大的编号吗?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-12-20 08:58
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
另外记录中还有其他唯一的关键字么?

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-12-20 09:01
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:5 
写了一段程序,应该可以实现楼主的意愿,只是速度太慢,
所以可以考虑在原表上加上关键字,然后用seek有可能会更快些
程序代码:
SELECT  xbid FROM aaa123 INTO ARRAY tmp&&将编号保存到数组tmp
USE aaa123
m=ALEN(tmp)
FOR i = 1 TO m&&遍历每个记录
    search=0&&数组中是否有记录的初始值
    DO WHILE .T.
        IF search=0&&第一次在数组中查找
            search=ASCAN(tmp,xbid,i+1)
        ELSE&&第一次以上在数组中查找
            search=ASCAN(tmp,xbid,search+1)
        ENDIF
        IF search=0&&如果查找不到,则退出
            EXIT
        ENDIF
        **如果查找到,则改变编号
        ii=1&&编号加每次加1的初始值
        searchnext=0&&编号加1是否在数组中得重复的初始值
        DO WHILE .T.
            xbidnext=PADR(LEFT(xbid,12)+ALLTRIM(STR((VAL(SUBSTR(xbid,13))+ii),16)),28)&&编号加1,超过了十六位,所以作了处理
            IF searchnext=0&&第一次查找加1的编号
                searchnext=ASCAN(tmp,xbidnext,search+1)
            ELSE&&第一次以上查找加1的编号
                searchnext=ASCAN(tmp,xbidnext,searchnext+1)
            ENDIF
            IF searchnext=0&&如果找不到这个加1的编号,则将刚才查找到不加1的编号变为这个加1编号。
                tmp(search)=xbidnext
                EXIT&&退出循环
            ENDIF
            ii=ii+1&&编号再次加1
        ENDDO
    ENDDO
    SKIP &&移动记录
ENDFOR
*****整理编号
GO TOP 
FOR i=1 TO m
GO i
replace xbid WITH tmp(i)
endif

坚持学习vfp,QQ:306805680
2012-12-20 10:47
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-12-20 12:36
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:10 
程序代码:
SELECT LEFT(XBID,14) XB,MAX(XBID) MAXXB FROM AAA123 GROUP BY XB INTO CURSOR T &&按前14位数字进行分组,并找出该分组的最大值
SELECT *,SPACE(20) N FROM AAA123 ORDER BY XBID INTO CURSOR T1 READWRITE &&生成新的临时表
BH=[]
BH1=[]
SELECT T
SCAN
   BH1=RIGHT(ALLTRIM(T.MAXXB),6)
   SELECT T1
   SCAN FOR LEFT(XBID,14)==T.XB
      IF ALLTRIM(XBID)==ALLTRIM(BH)
         REPLACE N WITH T.XB+PADL(ROUND(VAL(BH1)+1,0),6,[0])
         BH1=RIGHT(N,6)
      ENDIF
      BH=XBID
   ENDSCAN
   SELECT T
ENDSCAN
SELECT T1
BROWSE


[ 本帖最后由 bccn201203 于 2012-12-20 13:38 编辑 ]
2012-12-20 13:26
guxnan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2011-7-1
收藏
得分:0 
作个记号
2012-12-20 15:09
快速回复:求高手指教编程实现序号递增问题
数据加载中...
 
   



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

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