回 帖 发 新 帖 刷新版面

主题:求助:关于自动填充序列数值的问题。

各位大侠帮帮忙呀,小女子先谢过大家了。

有A、B两个dbf表。A表为公用表。

 A表                                         B表
  
 Number(字符型)                        编码(字符型)            No(字符型)

 00001                                 K110            
 00002                                 K023
 00003                                 J119
 00004                                 J001
 .....                                 J003 
 71280                                 A029
 .....                                 E118 
 88001                                 F088
 88002                                 
 .....                                 
 88924                                 
 97001                                 
 97002                                  
 .....                                 
 97298                                 
 


B表中的编码是由一个字母+3个数字组成。

现在想将B表中的No.用A表中的number+1来替换。

其中 left(allt(编码),1)='J'的,用以88开头的Number的最大值+1来替换。本例中,A表中以88开头的number最大值为88924。需要将J119的No替换成88925,将J001的No替换成88926,将J003的No替换成88927,依次类推。。。。。

其中 left(allt(编码),1)='K'的,用以97开头的Number的最大值+1。

其余的left(allt(编码),1)既不等于'J'也不等于'K'的,用以88、97开头除外的00001至87999中最大值+1来替换。



想要的结果如下

A表                                         B表
  
 Number(字符型)                        编码(字符型)            No(字符型)

 00001                                 K110                    97299
 00002                                 K023                    97300 
 00003                                 J119                    88925
 00004                                 J001                    88926
 .....                                 J003                    88927
 71279                                 A029                    71281
 71280                                 E118                    71282
 88001                                 F088                    71283
 88002                                 
 .....                                 
 88924                                 
 97001                                 
 97002                                  
 .....                                 
 97298                                 
 
如何用命令才能达到这样的目的呢?
                                       
如何用命令找出这几个88开头、97开头的最大值,以及非88、97开头的最大值呢? 

注:B表是可以排序的,要填充的No没有顺序限制。                                      
                                       





回复列表 (共3个回复)

沙发

下面三条命令分别找出A表中以“88”、“97”以及不以“88”、“97”开头的最大值。
至于怎样替换B表,应该不难吧。
SELECT MAX(Number) Number FROM A表 WHERE Number='88'
SELECT MAX(Number) Number FROM A表 WHERE Number='97'
SELECT MAX(Number) Number FROM A表 WHERE Number<>'88' AND Number<>'97'

板凳

就是序列填充数值不知道怎么填,还望大侠指点啊。我是100%菜鸟一个,呵呵。vfp一点都没学过,公司现在用vfp软件处理数据,没办法呀,只能求助了。

3 楼

用以下代码替换B表的No字段:
SET SAFETY OFF 
IF !USED("B表")
  USE B表
ENDIF 
DIMENSION CX1(3),CX2(3)
CX1(1)="Number='88'"
CX1(2)="Number='97'"
CX1(3)="Number<>'97' AND Number<>'88'"
CX2(1)="编码='J'"
CX2(2)="编码='K'"
CX2(3)="编码<>'K' AND 编码<>'J'"
FOR I=1 TO 3
  cCX1=CX1(I)
  cCX2=CX2(I)
  SELECT MAX(Number) Number FROM A表 WHERE &cCX1 INTO CURSOR TMP
  MaxN=VAL(Number)+1
  SELECT B表
  SET FILTER TO &cCX2
  GO TOP 
  DO WHILE !EOF()
    REPLACE No WITH ALLTRIM(STR(MaxN))
    SKIP 
    MaxN=MaxN+1
  ENDDO
NEXT
SET FILTER TO 

我来回复

您尚未登录,请登录后再回复。点此登录或注册