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