永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-03-22 08:16
VFP中怎样把同一张表中相同字段的内容合并为一条记录,并删除重复记录
最佳答案
做了一晚上,终于有结果了,我写了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条记录都能合并。不是我程序的问题。
全部回答
dsa
编程可解决吧。你的问题是要按A和C合并B和D,而且B和D都是字符型的。不知这个理解对不对呢
我这个不需要索引,也不需要将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
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
这个问题你让我耗费了一天半的时间,脑袋都要炸了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
格兰特地板在哪里啊,我有事要去这个地方
her faults, she’s Arnold’s mother. Don’
关于多学习的句子有哪些?
直销会议主持人台词,直销会议主持人精炼台词
填空题动物和植物的主要区别之一是:动物能够
取名有盛字也有吴字的名字
车辆违章电子警察拍照后,又没罚单到银行交不
-Have a nice weekend!- .A. You’re so ki
感谢微信朋友圈句子,和微信朋友圈说晚安的美
中柱山怎么去啊,有知道地址的么
电脑配置显卡怎么看好坏!
silly bitc是什么意思
如图所示,一个小球从光滑斜面的顶端自由下滑
北仑华山小学招生那么低,录取不了怎么办
青蛙属于两栖动物,原因是A.既可以生活在水中
推荐资讯
5房屋(卧室、客厅、厨房)对面是寺庙(清真
急急,杰普特长笛5011essc有此款型号吗?是不是
zippo打火机锻砂和磨砂有什么区别
单选题某商店在销售商品时,挂出“商品售出,
福州北站附近有宾馆吗?住一晚大概要多少钱?
想问一下中国男足参加2019年亚洲杯用踢预选赛
在观察蚕豆叶表皮的气孔时,不需要的实验步骤
航速快的成语有哪些,表示速度快的成语有哪些
奥迪s7和a7的区别
从东莞塘厦到桥头怎样坐车
excel中如何自动选出最大值和最小值
我家的2哈,4个月怎么拉这个了
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?