在Oracle SQL开发人员中,我有两列需要按以下顺序排序:
一个列名是OLD_TABLE_NAME,包含所有旧表名。 另一个列名是NEW_TABLE_NAME,其中列出了所有新表名
我需要做的是 按顺序排列表格列表 1)具有匹配的OLD_TABLE_NAME
的NEW_TABLE_NAME2)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)
答案 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