永发信息网

VFP中怎样把同一张表中相同字段的内容合并为一条记录,并删除重复记录

答案:5  悬赏:0  手机版
解决时间 2021-03-22 08:16
  • 提问者网友:树红树绿
  • 2021-03-21 11:52
VFP中怎样把同一张表中相同字段的内容合并为一条记录,并删除重复记录
最佳答案
  • 五星知识达人网友:鱼忧
  • 2021-03-21 12:35
做了一晚上,终于有结果了,我写了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追问不太清楚XYZ代表什么 ,是要用10来替换吗?追答我写的程序没问题,前提是你的c字段相同的值要排列在一起,如果需要,可以先按c字段建立索引。
xyz 是把当前c 字段的值先存到此变量中,然后与下面记录的c 字段的值进行比较,不能用具体值代替。追问我已经按你的程序试过了 并没有合并 所得新表和旧表是一样的追答不可能的,我已经试过了,连续的3条记录都能合并。不是我程序的问题。
全部回答
  • 1楼网友:爱难随人意
  • 2021-03-21 16:18
dsa
  • 2楼网友:动情书生
  • 2021-03-21 15:04
编程可解决吧。你的问题是要按A和C合并B和D,而且B和D都是字符型的。不知这个理解对不对呢
  • 3楼网友:迟山
  • 2021-03-21 13:59
我这个不需要索引,也不需要将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
  • 4楼网友:等灯
  • 2021-03-21 13:45
use 10086
kkk=""
Clear
PUBL mc
kh=1
mm=reccount()
i=FCOUNT()
GO top
DO while kh 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
这个问题你让我耗费了一天半的时间,脑袋都要炸了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯