求高手指教编程实现序号递增问题
我有一个表。里面有一个字段。有很多重复数据。现在需要将重复数据筛选出来。并且对重复数据的序号在同一类数据的最大号的基础上进行递增。比如
数据如下
aaa123.rar
(99.67 KB)
[ 本帖最后由 wjp456789 于 2012-12-19 23:56 编辑 ]
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
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