Oracle根据状态列的内容选择不同的列进行排序
在我的一个表中,有执行状态(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。