这是我想问的样本:
FOR EACH table-name.... NO LOCK BY (IF TRUE THEN sort-this ELSE sort-that + sort-that2).
END.
这会导致错误。
如果只是
FOR EACH .. NO LOCK BY (IF TRUE THEN sort-this ELSE sort-that).
END.
然后没有错误。 Progress会接受代码
如果条件为真,则需要按一个字段排序,否则按两个或多个字段排序
答案 0 :(得分:2)
如果您使用的是现代版本的Progress,则可以构建动态查询。这在运行时方面会更有效,并且可以帮助您解决问题,因为在查询谓词中使用IF语句会使索引选择变得困难。
QueryString = "for each table no-lock...".
if true then
QueryString = QueryString + " by sort-this".
else
QueryString = QueryString + " by sort-that by sort-other".
create query QueryHandle.
QueryHandle:add-buffer(buffer table:handle).
QueryHandle:query-prepare(QueryString).
QueryHandle:query-open.
do while QueryHandle:get-next():
/*some stuff*/
end.
QueryHandle:query-close.
delete object QueryHandle.
答案 1 :(得分:1)
根据之前的回复,不支持此功能。
通常,您必须先将结果准备到临时表中,然后使用临时表中的逻辑字段获取IF THEN ELSE表达式的结果。
答案 2 :(得分:0)
不幸的是,不支持此语法。根据文档,BREAK / BY需要一个表达式,但不是声明。