标题:求2个表的字段比较
只看楼主
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
结帖率:100%
已结贴  问题点数:90 回复次数:16 
求2个表的字段比较
各位老师好!
    求2个表相同字段比较的程序。
    发过去2个表,bx,by。
    2个表的字段相同(bx表里有qihao字段是唯一不同)。
求:bx表中z7,z8,z10,z11,z15,z23,z27,z28,z30,z31,
        z32,z33,z34,z35,z37,z38,z39,z40,z44,z45,
        z46,z50,z51,z52,z53,z54,z55,z59,z60,z61
    (字段名有连续的,有不连续的)字段最后一行的值,
    与by表中相对应的(相同的)字段的每一行(1000行)
    的值比较。
    相等的删除,不相等的保留。
    形成新表(不是临时表)。表结构与by相同。

举例:bx表中字段z7的最后一行是124。
      by表中字段z7的第一行是120,保留;
                   第二行是114,保留;
                   第三行是114,保留;
       .......
      
      bx表中的字段z8的最后一行是120.
      by表中的字段z8的第一行是96,保留;
                    第二行是114,保留;
                    第三行是112,保留;
      .......
     以此类推,直到by表的最后一行。   


bx.zip (334.01 KB)
by.zip (51.88 KB)
搜索更多相关主题的帖子: 保留 表中 比较 字段 一行 
2020-08-19 12:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:40 
程序代码:
* [color=#0000FF]by.dbf 改名 bX1.dbf 原因:自己想[/color]
lcStr = "z7,z8,z10,z11,z15,z23,z27,z28,z30,z31,z32,z33,z34,z35,z37,z38,z39,z40,z44,z45,z46,z50,z51,z52,z53,z54,z55,z59,z60,z61"
ALINES(laStr, lcStr, ",")
SELECT 0000 xh, &lcStr FROM bX1 WHERE .F. INTO TABLE bx2  && 生成的新表
SELECT &lcStr FROM bx WHERE RECNO() = RECCOUNT() INTO ARRAY aRecc
SELECT &lcStr FROM bx1 into CURSOR cx
SCAN
    SCATTER FIELDS &lcStr TO aRecn
    INSERT INTO bx2 (xh) VALUES (RECNO("cx"))
    FOR lnj = 1 TO ALEN(aRecc)
        IF aRecc[lnj] != aRecn[lnj]
            REPLACE (laStr[lnj]) WITH aRecn[lnj] IN bx2
        ENDIF 
    ENDFOR
ENDSCAN
SELECT bx2
BROWSE

坚守VFP最后的阵地
2020-08-20 09:31
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
得分:10 
我也做出来了,代码没有版主的精练,不过也能解决问题,供你参考吧.
代码和输出结果.rar (18.87 KB)
2020-08-20 09:50
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 2楼 sdta
非常感谢版主的帮助。
运行了程序。发现:删除的是一条记录中的一个数值,不是一整条记录。是我没有说清楚。
我的意思是:2个表30个字段中如有相等的,一整条记录都删除。
还请版主帮忙,改一下。
2020-08-20 20:57
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 3楼 厨师王德榜
感谢厨师王德榜。
看了你写的代码,为什么要将表bx,by放在c盘下。
我改了一下。结果在“输出结果”那一行显示“找不到别名”。
第4行,第5行看不懂,后面的循环也非常复杂。
能否将第7行,“输出结果”那一行改一下?
2020-08-20 21:27
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
程序代码:
NOTE by.dbf 改名 bX1.dbf 原因:自己想
lcStr = "z7,z8,z10,z11,z15,z23,z27,z28,z30,z31,z32,z33,z34,z35,z37,z38,z39,z40,z44,z45,z46,z50,z51,z52,z53,z54,z55,z59,z60,z61"
ALINES(laStr, lcStr, ",")
SELECT 0000 xh, &lcStr FROM bX1 WHERE .F. INTO TABLE BX2  && 生成的新表
SELECT &lcStr FROM bx WHERE RECNO() = RECCOUNT() INTO ARRAY aRecc
SELECT &lcStr FROM bX1 into CURSOR cx
SCAN
    SCATTER FIELDS &lcStr TO aRecn
    INSERT INTO bx2 (xh) VALUES (RECNO("cx"))
    LOCAL aa[1, ALEN(laStr)]
    FOR lnj = 1 TO ALEN(laStr)
        IF aRecc[lnj] = aRecn[lnj]
            EXIT 
        ELSE
            aa[1, lnj] = aRecn[lnj]
        ENDIF 
        IF lnj = ALEN(laStr)
            REPLACE FROM ARRAY aa FIELDS &lcStr IN bx2
        ENDIF 
    ENDFOR
ENDSCAN
SELECT bx2
BROWSE


[此贴子已经被作者于2020-8-21 08:12编辑过]


坚守VFP最后的阵地
2020-08-20 22:10
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
说明楼主没看懂代码的思路以及代码所表示的意思

坚守VFP最后的阵地
2020-08-20 22:32
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 6楼 sdta
版主你好!
昨晚近10点半发来的程序,今早运行一下,
结果是只剩下表结构,数据全没有了。   
2020-08-21 08:53
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:40 
回复 8楼 yd1954
可能是这意思:只要有一个对应的字段值相等就不保留这条记录
cf = "z7,z8,z10,z11,z15,z23,z27,z28,z30,z31,z32,z33,z34,z35,z37,z38,z39,z40,z44,z45,z46,z50,z51,z52,z53,z54,z55,z59,z60,z61"
USE bx
GO BOTTOM
SCATTER FIELDS &cf TO ax
n = ALEN(ax)
USE by
COPY STRUCTURE TO by1
USE by1
APPEND FROM by FOR fun()
BROWSE &&FIELDS &cf
RETURN

FUNCTION fun()
    SCATTER FIELDS &cf TO ay
    FOR i=1 TO n
        IF ax[i]==ay[i]
            RETURN .F.
        ENDIF
    ENDFOR
    RETURN .T.
ENDFUNC


[此贴子已经被作者于2020-8-21 09:05编辑过]

2020-08-21 08:58
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 楼主 yd1954
类似问题贴:https://bbs.bccn.net/thread-501013-1-1.html
2020-08-21 09:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502905-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.218948 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved