我有一个查询,我想根据条件进行两种排序。Oracle按不同条件排序
例如,如果一个字段为NULL,我需要作出一个命令,如果它不是,我不得不做另一个命令。我怎么能做到这一点?
select *
from table_1 t
order by (if t.field1 is null then
order by t.field2 DESC, field3 ASC
else
order by t.field4 ASC, field5 DESC)
这是一个示例代码:我想使不同的顺序(ASC/DESC和不同列)的基础上,FIELD1
的值例
有条件
ID FIELD1 FIELD2 FIELD3 FIELD4 FIELD5
1 1 2 3 4 5
2 NULL 6 7 8 9
DATA
ID PARENT_ID DATA1 DATA2 DATA3
1 1 X Y J
2 1 Z W U
3 2 XY YX O
4 2 ZW WZ I
select d.*
from data d, conditional c
where d.parent_id = c.id
and d.parent_id = 1
order by
case
when c.field1 is null then
data1 asc, data2 desc
else
data3 asc, data1 desc
end
在这个例子中,我选择了数据行ONE和TWO(父行id = 1的行)。 现在我已经做出了这个决定,我想根据CONDICTIONAL.FIELD1列的值来选择DATA列。我希望现在更加干净。
确定此查询确实有效,但这是“我需要的。”
你可以给出示例数据和示例输出吗?事实上,目前还不清楚你想达到什么目的。 – GolezTrol 2014-09-25 07:19:53
'ASC'和'DESC'是整个结果集的基础..不只是那一栏。 – 2014-09-25 07:26:50
用示例编辑原始答案 – Mistre83 2014-09-25 07:27:54