以下是引用calin在2017-7-28 14:59:19的发言:
比如我表里有A\B\C\D四个字段,我现在想用A和B两个字段排序,
即若A相同,按B字段排,优先排A字段。
这有几个方法:
1、想临时看一看的
SELECT * FROM 表文件名 ORDER BY A,B
当然啰,如果加上INTO TABLE子句,也可以按排好的顺序生成新表。
2、直接生成新表
SORT TO 新表文件名 ON A,B
3、不生成新表,只生成索引,以便在需要的时候随时调用
INDEX ON A+B TAG 索引标识名
注意:这里的“A+B”有讲究,不是简单地把字段名写在加号的两端即可。因为可以用作排序的字段类型有多种,最常见的是字符型(C、V)、数值型(N、B、I、Y)、日期型(D),以及日期时间型(T)。这又分三种情况:
(1)字符型+字符型。这种情况最好解,直接写成“A+B”这种形式就可以了;
(2)字符型+数值型、字符型+日期型、字符型+日期时间型、数值型+日期型、数值型+日期时间型、日期型+日期型、日期型+日期时间型、日期时间型+日期时间型。当出现这八种组合相遇时,统一转换成字符型,再写入加号两端即可。比如:字符型+数值型,可写成:A+STR(B);数值型+日期型,可写成:STR(A)+DTOS(B);日期时间型+日期时间型,可写成:TTOC(A,1)+TTOC(B,1)。
(3)数值型+数值型。这种情况比较复杂。从语法上来说,直接进行数学意义上的加法后索引也能顺利执行,不过是否符合要求就很难说了。当碰到这种类型的索引时,一定要搞清楚要求,这分两种情况:(1)将两者都转换成字符串后进行连接,作为索引表达式;(2)将两者直接进行数学意义上的加法后作为索引表达式。
比如,有一个月薪表需要索引,要求是:先按工资降序排列,工资相同的按奖金降序排列。有三条记录,工资/奖金分别是:600/1000、500/1200、600/900。乍一看,好象用上述两种方法产生的结果是一样,其实不然。只有当工资相同时,两种方法的结果才一样。但关键在于不是所有人的工资都一样,而且工资低的奖金可能还更高(此例就是)。如果简单进行数学相加就产生了一个问题:500/1200的那条记录原本应该排在另两后面,结果却因为数学相加后的值最大,反而排到那两条记录前面去了。故,此例应该用表达式“STR(工资,3)+STR(奖金,4)”配合DESCENDING子句进行索引。若要求改为按月收入降序排列,那么直接用表达式“工资+奖金”配合DESCENDING子句进行索引就好了。这时,500/1200那条记录就应该排在首位。