我在FoxPro中的dbf文件中有60,000条记录。我想将它分成每个20,000条记录(20000 * 3 = 60,000)。如何拆分FoxPro记录?
我该如何做到这一点?
我是FoxPro新手。我正在使用Visual FoxPro 5.0。
在此先感谢。
我在FoxPro中的dbf文件中有60,000条记录。我想将它分成每个20,000条记录(20000 * 3 = 60,000)。如何拆分FoxPro记录?
我该如何做到这一点?
我是FoxPro新手。我正在使用Visual FoxPro 5.0。
在此先感谢。
您必须使用COPY
命令时,确保你已经开始对下一个记录发出SKIP
命令。
USE MyTable
GO TOP
COPY NEXT 20000 TO NewTable1
SKIP 1
COPY NEXT 20000 TO NewTable2
SKIP 1
COPY NEXT 20000 TO NewTable3
您可以直接从第一表中选择:
SELECT * from MyBigTable INTO TABLE SmallTable1 WHERE ID < 20000
SELECT * from MyBigTable INTO TABLE SmallTable2 WHERE ID BETWEEN (20000, 39999)
SELECT * from MyBigTable INTO TABLE SmallTable3 WHERE ID > 39999
,如果你想要更多的控制,但是,或者你需要处理数据,您可以使用XBASE代码,像这样:
SELECT MyBigTable
scan
scatter name oRecord memo
if oRecord.Id < 20000
select SmallTable1
append blank
gather name oRecord memo
else if oRecord.Id < 40000
select SmallTable2
append blank
gather name oRecord memo
else
select SmallTable3
append blank
gather name oRecord memo
endscan
自从我使用VFP以来,我已经有一段时间了,并且我没有它,所以对于任何语法错误都表示歉意。
use in 0 YourTable
select YourTable
go top
copy to NewTable1 next 20000
copy to NewTable2 next 20000
copy to NewTable3 next 20000
托德的建议将工作,如果你不在乎记录如何拆分。如果你想根据他们的内容划分它们,你会想要做一些类似斯图尔特的第一个建议,尽管他的确切答案只有在记录的ID从1到60,000的顺序才有效。
这里的最终目标是什么?为什么把桌子分开?
添马舰
如果你想基于创纪录的数字分裂,试试这个:
SELECT * FROM table INTO TABLE tbl1 WHERE RECNO() <= 20000
SELECT * FROM table INTO TABLE tbl2 WHERE BETWEEN(RECNO(), 20001, 40000)
SELECT * FROM table INTO TABLE tbl3 WHERE RECNO() > 40000
您需要的COPY之间发出SKIP 1命令,命令将记录指针前进1分的纪录。用你的答案,NewTable1的最后一条记录与NewTable2的第一条记录相同。 – DaveB 2011-03-25 17:12:03