问题是这样的:
有两张表,表1有XM,CSNY,RXNY,A,B,C,D,....等等好多个字段,表2有XM,CSNY,RXNY,A,B,C六个字段。其中表2的A,B,C字段下均为空。
现欲根据XM作为索引检索表1的A,B,C的内容并拷贝到表2的相应记录下,即对于表2的每条记录,用XM检索表1的相应记录,并拷贝A,B,C到表2下。
由于表1里有可能同一个XM有2条及以上的记录,这时候需要根据CSNY,RXNY进一步区分。
能不能给我一段直接能用的代码?Thank you very much!
10 个解决方案
#1
说的不够清楚,不知道下面的语句和不和你的要求:
select b.xm,b.csny,b.rxny,a.a,a.b,a.c from a,b where
a.xm=b.xm and a.csdy=b.csdy and a.rxny=b.rxny into dbf newb
select b.xm,b.csny,b.rxny,a.a,a.b,a.c from a,b where
a.xm=b.xm and a.csdy=b.csdy and a.rxny=b.rxny into dbf newb
#2
select a
use 表1
select b
use 表2
select a
do while .not. eof()
select b
goto top
locate for XM==a.XM and CSNY==a.CSNY and RXNY==a.RXNY
if found()
goto recno()
replace A whith a.A, B with a.B, C with a.C
endif
select a
skip
enddo
use 表1
select b
use 表2
select a
do while .not. eof()
select b
goto top
locate for XM==a.XM and CSNY==a.CSNY and RXNY==a.RXNY
if found()
goto recno()
replace A whith a.A, B with a.B, C with a.C
endif
select a
skip
enddo
#3
along的方法是可行的,取出符合的记录到一个新库,然后添加到B中。
只要是你的想法和其给出的条件一致就可以;
select .....
use b
appe from newb
只要是你的想法和其给出的条件一致就可以;
select .....
use b
appe from newb
#4
你们能告诉我以上两段代码是不是在命令窗口直接运行的吗?
还有,若表1是ORACLE数据库的,而表2是DBF格式的怎么办?
还有,若表1是ORACLE数据库的,而表2是DBF格式的怎么办?
#5
你要让它直接运行可把上面的代码
加到命令窗口的init或load事件中
否则可添加一按钮,将代码写入其click事件中
加到命令窗口的init或load事件中
否则可添加一按钮,将代码写入其click事件中
#6
将use 后面的表1,表2用实际的表名代替即可在命令窗口中直接运行,如果表不在默认路径中,需加上路径。对oracle不是太熟,我想use 命令应该只能用于dbf格式文件吧,或者可以试试用import命令将oracle数据导入吧
#7
表1.XM---表2.XM,表1.CSNY---表2.CSNY,表1.RXNY---表2.RXNY(这是对应关系)
由于表2里的数据是人工输入的,特别是CSNY和RXNY字段很可能有错,而一般情况下XM字段就足够唯一辨别。所以我想这样:
1,对应表2的一条确定的记录,按XM检索表1的数据,若在表1里只能查出唯一的一个记录,则执行拷贝A,B,C字段内容的工作。
2,否则说明表2存在两条或以上的记录且这些记录的XM字段相同,这时若根据CSNY能进一步区分开这些记录,则执行拷贝。
3,否则用RXNY字段再次区分,若能,则执行拷贝。若还是不能区分开,则把表2的这条记录拷贝到另外一个文件,以便人工区分用。此时不执行拷贝。
这样循环,直至表2的所有记录都被处理过。
谢谢!
我的油箱是handyqiu@yeah.net,若有兴趣,大家以后互相帮忙。
由于表2里的数据是人工输入的,特别是CSNY和RXNY字段很可能有错,而一般情况下XM字段就足够唯一辨别。所以我想这样:
1,对应表2的一条确定的记录,按XM检索表1的数据,若在表1里只能查出唯一的一个记录,则执行拷贝A,B,C字段内容的工作。
2,否则说明表2存在两条或以上的记录且这些记录的XM字段相同,这时若根据CSNY能进一步区分开这些记录,则执行拷贝。
3,否则用RXNY字段再次区分,若能,则执行拷贝。若还是不能区分开,则把表2的这条记录拷贝到另外一个文件,以便人工区分用。此时不执行拷贝。
这样循环,直至表2的所有记录都被处理过。
谢谢!
我的油箱是handyqiu@yeah.net,若有兴趣,大家以后互相帮忙。
#8
能根据我上面发的帖子给我一段在命令窗口中就运行的代码吗?
#9
以上,同意xiaoli_xie(snow)
不过要是在sql中,一句话就搞定了
不过要是在sql中,一句话就搞定了
#10
n=0
select a
use 表1
select b
use 表2
do while .not. eof()
select a
goto top
locate for XM==b.XM and CSNY==b.CSNY and RXNY==b.RXNY
if found()
n=recno()
continue
if found()
select c
use 表3
append blank
replace XM with b.XM, CSNY with b.CSNY, RXNY with b.RXNY;
A with b.A, B with b.B, C with b.C
else
select a
goto n
select b
replace A whith a.A, B with a.B, C with a.C
endif
endif
select b
skip
enddo
其中表3应与表2结构相同
select a
use 表1
select b
use 表2
do while .not. eof()
select a
goto top
locate for XM==b.XM and CSNY==b.CSNY and RXNY==b.RXNY
if found()
n=recno()
continue
if found()
select c
use 表3
append blank
replace XM with b.XM, CSNY with b.CSNY, RXNY with b.RXNY;
A with b.A, B with b.B, C with b.C
else
select a
goto n
select b
replace A whith a.A, B with a.B, C with a.C
endif
endif
select b
skip
enddo
其中表3应与表2结构相同
#1
说的不够清楚,不知道下面的语句和不和你的要求:
select b.xm,b.csny,b.rxny,a.a,a.b,a.c from a,b where
a.xm=b.xm and a.csdy=b.csdy and a.rxny=b.rxny into dbf newb
select b.xm,b.csny,b.rxny,a.a,a.b,a.c from a,b where
a.xm=b.xm and a.csdy=b.csdy and a.rxny=b.rxny into dbf newb
#2
select a
use 表1
select b
use 表2
select a
do while .not. eof()
select b
goto top
locate for XM==a.XM and CSNY==a.CSNY and RXNY==a.RXNY
if found()
goto recno()
replace A whith a.A, B with a.B, C with a.C
endif
select a
skip
enddo
use 表1
select b
use 表2
select a
do while .not. eof()
select b
goto top
locate for XM==a.XM and CSNY==a.CSNY and RXNY==a.RXNY
if found()
goto recno()
replace A whith a.A, B with a.B, C with a.C
endif
select a
skip
enddo
#3
along的方法是可行的,取出符合的记录到一个新库,然后添加到B中。
只要是你的想法和其给出的条件一致就可以;
select .....
use b
appe from newb
只要是你的想法和其给出的条件一致就可以;
select .....
use b
appe from newb
#4
你们能告诉我以上两段代码是不是在命令窗口直接运行的吗?
还有,若表1是ORACLE数据库的,而表2是DBF格式的怎么办?
还有,若表1是ORACLE数据库的,而表2是DBF格式的怎么办?
#5
你要让它直接运行可把上面的代码
加到命令窗口的init或load事件中
否则可添加一按钮,将代码写入其click事件中
加到命令窗口的init或load事件中
否则可添加一按钮,将代码写入其click事件中
#6
将use 后面的表1,表2用实际的表名代替即可在命令窗口中直接运行,如果表不在默认路径中,需加上路径。对oracle不是太熟,我想use 命令应该只能用于dbf格式文件吧,或者可以试试用import命令将oracle数据导入吧
#7
表1.XM---表2.XM,表1.CSNY---表2.CSNY,表1.RXNY---表2.RXNY(这是对应关系)
由于表2里的数据是人工输入的,特别是CSNY和RXNY字段很可能有错,而一般情况下XM字段就足够唯一辨别。所以我想这样:
1,对应表2的一条确定的记录,按XM检索表1的数据,若在表1里只能查出唯一的一个记录,则执行拷贝A,B,C字段内容的工作。
2,否则说明表2存在两条或以上的记录且这些记录的XM字段相同,这时若根据CSNY能进一步区分开这些记录,则执行拷贝。
3,否则用RXNY字段再次区分,若能,则执行拷贝。若还是不能区分开,则把表2的这条记录拷贝到另外一个文件,以便人工区分用。此时不执行拷贝。
这样循环,直至表2的所有记录都被处理过。
谢谢!
我的油箱是handyqiu@yeah.net,若有兴趣,大家以后互相帮忙。
由于表2里的数据是人工输入的,特别是CSNY和RXNY字段很可能有错,而一般情况下XM字段就足够唯一辨别。所以我想这样:
1,对应表2的一条确定的记录,按XM检索表1的数据,若在表1里只能查出唯一的一个记录,则执行拷贝A,B,C字段内容的工作。
2,否则说明表2存在两条或以上的记录且这些记录的XM字段相同,这时若根据CSNY能进一步区分开这些记录,则执行拷贝。
3,否则用RXNY字段再次区分,若能,则执行拷贝。若还是不能区分开,则把表2的这条记录拷贝到另外一个文件,以便人工区分用。此时不执行拷贝。
这样循环,直至表2的所有记录都被处理过。
谢谢!
我的油箱是handyqiu@yeah.net,若有兴趣,大家以后互相帮忙。
#8
能根据我上面发的帖子给我一段在命令窗口中就运行的代码吗?
#9
以上,同意xiaoli_xie(snow)
不过要是在sql中,一句话就搞定了
不过要是在sql中,一句话就搞定了
#10
n=0
select a
use 表1
select b
use 表2
do while .not. eof()
select a
goto top
locate for XM==b.XM and CSNY==b.CSNY and RXNY==b.RXNY
if found()
n=recno()
continue
if found()
select c
use 表3
append blank
replace XM with b.XM, CSNY with b.CSNY, RXNY with b.RXNY;
A with b.A, B with b.B, C with b.C
else
select a
goto n
select b
replace A whith a.A, B with a.B, C with a.C
endif
endif
select b
skip
enddo
其中表3应与表2结构相同
select a
use 表1
select b
use 表2
do while .not. eof()
select a
goto top
locate for XM==b.XM and CSNY==b.CSNY and RXNY==b.RXNY
if found()
n=recno()
continue
if found()
select c
use 表3
append blank
replace XM with b.XM, CSNY with b.CSNY, RXNY with b.RXNY;
A with b.A, B with b.B, C with b.C
else
select a
goto n
select b
replace A whith a.A, B with a.B, C with a.C
endif
endif
select b
skip
enddo
其中表3应与表2结构相同