SQL search results in order of what was searched

时间:2016-05-11 11:31:45

标签: sql select sql-order-by

I want the server to give me the results of a query in the order I send it.

So if I write:

SELECT * FROM table WHERE column in (9,1,8)

I would like it to give me the results in the order: 9,1,8

4 个答案:

答案 0 :(得分:0)

One method uses left join:

select t.*
from (select 9 as c, 1 as priority union all select 1, 2 union all select 8, 3
     ) vals left join
     table t
     on t.column = vals.c
order by vals.priority;

Note: This is generic syntax. The specific syntax for the subquery may differ depending on the database.

Another method uses case in the order by:

select t.*
from table t
where t.column in (9, 1, 8)
order by (case column when 9 then 1 when 1 then 2 when 8 then 3 end);

Once again, this can be simplified in some databases, say by using special functions.

答案 1 :(得分:0)

您可以按照自己的意愿使用CASE表达式,例如:

select *
from table_name
where column_name in (9,1,8)
order by case column_name 
                 when 9 then 1 
                 when 1 then 2 
                 when 8 then 3 end
         , column_name -- optional, but here could go another column if you want to have custom order

答案 2 :(得分:0)

如果你有

,你可以在Oracle SQL中执行
SELECT Column_name
FROM user_tab_columns
where table_name = 'MY_TABLE'
and Column_id in (9,1,8)

答案 3 :(得分:-1)

SELECT *
FROM table
WHERE column IN (9, 1, 8)
ORDER BY CASE WHEN column = 9 THEN 1
              WHEN column = 1 THEN 2
              WHEN column = 8 THEN 3
         END