订购BY方法

时间:2016-05-18 13:44:15

标签: oracle

在Oracle SQL开发人员中,我有两列需要按以下顺序排序:

一个列名是OLD_TABLE_NAME,包含所有旧表名。 另一个列名是NEW_TABLE_NAME,其中列出了所有新表名

我需要做的是 按顺序排列表格列表 1)具有匹配的OLD_TABLE_NAME

的NEW_TABLE_NAME

2)NEW_TABLE_NAME没有匹配的OLD_TABLE_NAME(NEW_TABLE_NAME会有姓名,但OLD_TABLE_NAME会为空)

3)OLD_TABLE_NAME没有匹配的NEW_TABLE_NAME(OLD_TABLE_NAME列会有名称,但NEW_TABLE_NAME列会为NULL)

3 个答案:

答案 0 :(得分:0)

从问题中不清楚,但我理解它就像你想首先通过匹配电影和导演然后通过匹配电影然后其余部分订购:

order by case when movie = :movie and director = :director then 1
              when movie = :movie then 2
              else 3 end

答案 1 :(得分:0)

试试这个

select *
from (
select 1 as rank, movie as movie, director as director
from yourtable
where director is not null

union all

select 2, movie, ''
from yourtable
where director is null) movies

order by rank, movie asc

答案 2 :(得分:0)

对所需的影片和导演值使用绑定变量:

SELECT   *
FROM     table_name
WHERE    movie    = :movie
OR       director = :director
ORDER BY movie    NULLS LAST,
         director NULLS LAST