在我的一个表中,有执行状态(STATUS)、完成时间(END_TIME)和取消时间(CANCEL_TIME)等字段,现在要查出表中的一批数据,排序要求如果状态是完成则使用完成时间,如果状态是取消则使用取消时间来倒序排序。

在Oracle中可以使用Case 语法来进行实现。Case语法是Oracle 9i后开始支持的,是一个比较灵活的语法。

select *
from EQUIPMENT
order by (case STATUS
            when 2 then
             CANCEL_TIME
            else
             END_TIME
          end) desc

上面的SQL表示在STATUS字段值为2时返回CANCEL_TIME字段,否则返回END_TIME。

发表评论

邮箱地址不会被公开。 必填项已用*标注