回 帖 发 新 帖 刷新版面

主题:各位老师过节好,请教个问题

各位老师过节好,我是个初学者,有很多不懂。我想请教个问题:如何能比对两个DBF中数据一致的并把它罗列出来?两个表的数据各有数百条。比对的条件:姓名 金额 时间这三个都一样才行。谢谢

如:

DBFa 序号 姓名 金额      时间

        1      张三 6500  2012.1.1

        2      李四 5500  2012.1.15

        3      王五 5530  2012.1.14

        4      孙六 4500  2012.1.7

        5      韩七 1400  2012.1.5

        : : : : : : : :

DBFb 序号 姓名   金额     时间

         1    韩七   8400   2012.1.5

         2    刘八   4700   2012.1.14

         3    张三   6500   2012.1.1

         4    孙六   4500   2012.1.7

         5   钱九    7100   2012.1.4

         : : :    :     :

新表 DBFc 序号 姓名 金额    时间

               1     张三 6500 2012.1.1

               2     孙六 4500 2012.1.7

                     : : : :

回复列表 (共9个回复)

沙发

close all
select a.* ;
 from a.dbf a,b.dbf b ;
 where allt(a.姓名)+allt(a.金额)+allt(a.时间)==allt(b.姓名)+allt(b.金额)+allt(b.时间) into table d.dbf 

close all
sele recn() 序号,* from d.dbf into table c.dbf

close all
erase d.dbf

板凳

cagd老师好,我用你给的代码操作,1.用命令窗口做,提示文件不存在。
2.用表单命令按钮做,提示函数值等无效,点忽略后,出来C.dbf,但不是重复的内容一致的罗列出来。请给予指教。谢谢

3 楼

需修改这个条件:where allt(a.姓名)+allt(a.金额)+allt(a.时间)==allt(b.姓名)+allt(b.金额)+allt(b.时间)
估计问题在这里,字段类型不一致,所以提示函数值等无效,
因为这个命令的前提是认为三个多是字符型的字段,姓名,金额,.时间,你将结构改一下,就好了。或者把这三个字段的类型贴出来,再修改这个条件:where allt(a.姓名)+allt(a.金额)+allt(a.时间)==allt(b.姓名)+allt(b.金额)+allt(b.时间)

4 楼

谢谢2位老师的指教。有情况再请教。

5 楼

[url=http://]SELECT RECNO(),C.* FROM (SELECT A.姓名,A.金额,A.时间 FROM TABA A,TABB B WHERE A.姓名==B.姓名 AND A.金额==B.金额 AND A.时间==B.时间) C[/url]

6 楼

老师们好,几天因为忙,没有回复老师们,现在这个对比出现点问题,内容是空的。仅有字段名。这么回事呢?谢谢老师

7 楼

SELECT dbfa.* FROM dbfa,dbfb  WHERE dbfA.姓名=dbfB.姓名 AND dbfA.金额=dbfB.金额 AND dbfA.时间=dbfB.时间 into table dbfc

8 楼

qjbzjp老师好,用你的代码也没有内容,仅有字段名。cagd老师教给的代码有一次练习时,出来了对比数据,符合我的想法。为什么以后就没内容呢?希望老师们给予指教。两个表大部分数据是相同的,只不过序号不同,排序不同。我想通过对比把相同数据都罗列出来,我用这个代码有什么错误?字段名都设为字符型。
select a.序号,a.姓名,a.金额,a.时间,b.姓名,b.金额,b.金额,b.序号 from a.dbf,b.dbf where a.姓名=b.姓名and a.金额=b.金额 and a.时间=b.时间 
用这个代码两个表里各有数百条数据对比出来仅有10余个,应该不是相同数据的很少才对,大部分都相同。谢谢老师

9 楼

消除空格的影响试试:

SELECT dbfa.* FROM dbfa,dbfb  WHERE ALLTRIM(dbfA.姓名)=ALLTRIM(dbfB.姓名) AND ALLTRIM(dbfA.金额)=ALLTRIM(dbfB.金额) AND ALLTRIM(dbfA.时间)=ALLTRIM(dbfB.时间) into table dbfc

我来回复

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