VFP中怎样把同一张表中相同字段的内容合并为一条记录,并删除重复记录...
发布网友
发布时间:2024-03-09 03:21
我来回答
共5个回答
热心网友
时间:2024-04-03 14:50
做了一晚上,终于有结果了,我写了4条记录,验证正确。最后的合并结果在一个新的表:新10086.dbf中。
新10086 表的结构与10086表结构相同。所有字段都是字符型。字段b、字段d的宽度要足够。
clear
sele 1
use 10086
copy stru to 新10086
flag=0
xyz=c
b合并值=alltrim(b)
d合并值=alltrim(d)
do while not eof()
skip
if c==xyz
b合并值=b合并值+","+alltrim(b)
d合并值=d合并值+","+alltrim(d)
flag=1
loop
else
if flag=1
sele 2
use 新10086
append blank
replace a with "10086",b with b合并值,c with xyz ,d with d合并值
endif
endif
sele 1
xyz=c
b合并值=alltrim(b)
d合并值=alltrim(d)
flag=0
enddo
sele 2
browse
close table all
cancel
热心网友
时间:2024-04-03 14:55
use 10086
kkk=""
Clear
PUBL mc
kh=1
mm=reccount()
i=FCOUNT()
GO top
DO while kh<mm
GO kh
DIMENSION myarray(i)
SCATTER to myarray(i)
xh1=myarray(1)
FOR j=2 to i
jj=allt(str(j))
zd&jj=""
xh1&jj=myarray(j)
ENDFOR
DO while.not.eof()
IF .not.eof()
Skip
IF mc=xh1
FOR j=2 to i
jj=allt(str(j))
bn=fields(j)
xh1&jj=allt(xh1&jj)+","+allt(&bn)
ENDFOR
Dele
mm=mm-1
ENDIF
ENDIF
ENDDO
FOR j=2 to i
jj=allt(str(j))
bn=fields(j)
REPL &bn with xh1&jj for mc=xh1
ENDFOR
kh=kh+1
ENDDO
PACK
RETURN
这个问题你让我耗费了一天半的时间,脑袋都要炸了
热心网友
时间:2024-04-03 14:58
编程可解决吧。你的问题是要按A和C合并B和D,而且B和D都是字符型的。不知这个理解对不对呢
热心网友
时间:2024-04-03 14:58
dsa
热心网友
时间:2024-04-03 14:55
我这个不需要索引,也不需要将C列相同的项排在一起。已经在电脑上验证过了,完全没问题
use 10086
copy stru to temp &&生成临时文件,存储合并数据
hbbb="" &&保存合并数据的变量
hbdd="" &&保存合并数据的变量
do whil recc()>0
go 1
stor allt(a) to aa
stor allt(c) to cc
stor allt(b) to bb
stor allt(d) to dd
count for allt(A)=aa .and. allt(C)=cc to sc &&计算与第一条记录A列和C列相同的记录条数
if sc=1
dele for allt(A)=aa .and. allt(C)=cc &&删除已经统计过的数据,避免重复统计
pack &&删除已经统计过的数据,避免重复统计
use temp
appe blan
repl A with aa,B with bb,C with cc,D with dd &&向临时数据库中添加统计结果
else
k=1
loca for allt(A)=aa .and. allt(C)=cc
if found()
if sc>1
do whil k<=sc
stor allt(b) to bb
stor allt(d) to dd
dele &&删除已经统计过的数据,避免重复统计
pack &&删除已经统计过的数据,避免重复统计
hbbb=hbbb+","+bb &&合并A列和C列相同的记录的B、D列
hbdd=hbdd+","+dd &&合并A列和C列相同的记录的B、D列
loca for allt(A)=aa .and. allt(C)=cc
k=k+1
endd
endi
use temp
appe blan
repl A with aa,B with subs(allt(hbbb),2,len(allt(hbbb))-1),C with cc,D with subs(allt(hbdd),2,len(allt(hbdd))-1) &&向临时数据库中添加统计结果
hbbb=""
hbdd=""
endi
endi
clos data
use 10086
endd
clos data
dele file 10086.dbf &&注意此处删除了你的原始文件,如果你要保留你的原始文件,请先备份
rena temp.dbf to 10086.dbf &&将临时文件改名为10086.dbf
use 10086
brow