vf中的sort on 命令
发布网友
发布时间:2022-04-26 14:37
我来回答
共3个回答
热心网友
时间:2022-04-22 05:23
SORT命令
对当前选定表进行排序,并将排过序的记录输出到新表中。
语法
SORT TO TableName ON FieldName1 [/A | /D] [/C]
[, FieldName2 [/A | /D] [/C] ...]
[ASCENDING | DESCENDING]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[FIELDS FieldNameList
| FIELDS LIKE Skeleton
| FIELDS EXCEPT Skeleton]
[NOOPTIMIZE]
参数
TableName
存放排序后记录的新表名,Visual FoxPro 为表取 .DBF 文件扩展名。如果文件不包含扩展名,则自动为它指定 .DBF 扩展名。
ON FieldName1
在当前选定的、要排序的表中指定字段,字段的内容和数据类型决定了记录在新表中的顺序。默认情况是按升序排序,不能对备注或通用字段排序。
要进一步排序新表,可以包含附加字段名 (FieldName2,FieldName3)。第一个字段 FieldName1 是主排序字段,第二个字段 FieldName2
是第二级排序字段 … 依此类推。
下面示例按三个字段对表进行排序。先将 Customer 表打开并排序,同时创建了一个名为 temp 的新表,temp 中的记录按 cust_id 字段排序。
CLOSE DATABASES
OPEN DATABASE (HOME( ) + 'samples\data\testdata')
USE customer && 打开 customer 表
CLEAR
LIST FIELDS company, cust_id NEXT 3
SORT TO temp ON cust_id
USE temp
LIST FIELDS company, cust_id NEXT 3
WAIT WINDOW 'Now sorted on CUST_ID' NOWAIT
[/A | /D] [/C]
对于排序中包含的每个字段,可以指定排序顺序(升序或降序)。/A 为字段指定了升序。/D 指定了降序,/A 或 /D 可以作用于任何类型的字段。
默认情况下,字符型字段的排序顺序区分大小写。如果在字符型字段名后包含 /C,则忽略大小写。可以把 /C 选项同 /A 或 /D 选项组合起来,例如 /AC 或 /DC。
在下面的示例中,创建了一个名为 client 的新表,orders 表在 order_date 字段上按升序排序,在 freight 字段上按降序排序。
USE orders
SORT TO clients ON order_date/A,freight/D
ASCENDING
将所有不带 /D 的字段指定为升序排列。
DESCENDING
将所有不带 /A 的字段指定为降序排列。
如果省略 ASCENDING 或 DESCENDING 参数,则排序顺序默认为升序。
Scope
指定需要排序的记录范围。范围子句包括:ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。有关范围子句的详细内容,请参阅 Scope 子句主题,或《开发指南》的第二章“语言概述”。
SORT 命令的默认范围是 ALL,即所有记录。
FOR lExpression1
在当前表中,指定排序中只包含逻辑条件 lExpression1 为“真”(.T.) 的记录。FOR 子句可以有条件地排序记录,筛掉不满足条件的记录。
如果 lExpression1 是可优化表达式,Rushmore 会优化这个 SORT ... FOR 命令。为达到最优性能,应在 FOR 字句中使用可优化表达式。有关 Rushmore 可优化表达式的内容,请参阅《开发指南》第十七章“优化应用程序”。
WHILE lExpression2
指定一个条件,在当前表中,只要逻辑表达式 lExpression2 的计算值为“真”,则依据此条件,排序中包含这个记录。
FIELDS FieldNameList
指定用 SORT 命令创建的新表中要包含的原表中的字段。如果省略 FIELDS 字句,新表中将包括原表中所有字段。
FIELDS LIKE Skeleton
在新表中包含那些与字段梗概 Skeleton 相匹配的原表字段,新表用 SORT 命令创建。
FIELDS EXCEPT Skeleton
在新表中包含那些不与字段梗概 Skeleton 相匹配的原表字段。
字段梗概 Skeleton 支持通配符。例如,如果想在新表中包含所有以 A 和 P 开头的字段,可以使用下面的命令:
SORT TO mytable ON myfield FIELDS LIKE A*,P*
可以将 LIKE 子句同 EXCEPT 子句组合使用:
SORT TO mytable ON myfield FIELDS LIKE A*,P* EXCEPT PARTNO*
NOOPTIMIZE
关闭 SORT 命令的 Rushmore 优化。有关详细内容,请参阅 SET OPTIMIZE 和深入了解 Rushmore 技术主题,或《开发指南》的第十七章“优化应用程序”。
说明
当前表中的一个或多个指定字段决定了记录在新表中出现的顺序。
重要内容
要确保有足够的磁盘空间保存新表,以及存储在排序过程中创建的临时工作文件,排序所需的磁盘空间可能是原表的三倍。可以用 DISKSPACE( ) 和 SYS(2020) 函数确定可用磁盘空间大小。如果在排序过程中,磁盘空间不足,Visual FoxPro 会显示错误信息,并删除临时工作文件。
包含数字和空格的字符型字段可能不会按照所希望的那样排序。这是因为数值型字段从右向左填充,空格位于左边;而字符型字段是从左向右填充,空格位于右边。
例如,表的两个记录包含字符型字段:一个是 1724,另一个是 18,而表按该字段以升序排序,则包含 1724 的记录会出现在包含 18 的记录的前面。这是因为 Visual FoxPro 从左向右读取字符型字段中的字符,由于 17(1724)比 18(18)小,则 1724 出现在前面。为避免这类问题,应在位数较小的数字前加零(0018),或者使用数值型字段。
热心网友
时间:2022-04-22 06:41
要将排序的结果转到一个新表中
要的话
use 表名
sort to 新表名 on 年龄 A for 性别="女"
不要的话
sort on 年龄 A for 性别="女"
用sort命令时千万不要写 asc 或desc ,只能写A或D ,否则会提示语法错误
热心网友
时间:2022-04-22 08:16
use xs.dbf (xh,xm)
sort to 新表名 on xh /a
use 新表名
brows
你看到一个以xh字段为准按照升序排列的新表
SORT TO TableName ON FieldName1 [/A | /D] [/C]
[, FieldName2 [/A | /D] [/C] ...] [ASCENDING | DESCENDING]
[Scope] [FOR lExpression1] [WHILE lExpression2]
[FIELDS FieldNameList | FIELDS LIKE Skeleton
| FIELDS EXCEPT Skeleton] [NOOPTIMIZE]
[/A | /D] [/C]
For each field you include in the sort, you can specify an ascending or descending sort order. /A specifies an ascending order for the field. /D specifies a descending order. /A or /D can be included with any type of field.
By default, the field sort order for character fields is case sensitive. If you include the /C option after the name of a character field, case is ignored. You can combine the /C option with the /A or /D option. For example, /AC or /DC.
In the following example, a new table named clients is created. The orders table is sorted on the order_date field in ascending order and the freight field in descending order.
USE orders
SORT TO clients ON order_date/A,freight/D
这种英文应该看得懂吧!