按特定顺序选择记录

时间:2019-11-20 10:20:26

标签: sql oracle

我有一个如下表。

Route::get('/post/{id}', function(Request $request, $id){
    $posts = User::join('posts','posts.user_id','=','users.id')
    ->where('id', $id)->get();
    return view('posts')->with('posts', $posts);
});

操作:

Select name from t1;

想像下面的操作

 name
 ----
 A
 D
 X
 Z

不使用联合运算符 应该是一个查询

2 个答案:

答案 0 :(得分:1)

仅针对那些值:

SELECT name FROM t1
ORDER BY
  case name when 'X' then 0 else 1 end,
  name

X是唯一一个不按字母顺序排列的字母,因此,如果我们使用一种情况将0分配给该字母,将1分配给其他所有字母,然后按0/1进行排序,那么最后将得到X依次排序和所有内容else并列于1。通过在CASE上进行排序

您还可以使用其他一些类似的技巧来进行解码,例如,为所有内容赋予一个值(如gmb一样),将X替换为null并先对NULLS进行排序,然后将X替换为将在A之前进行排序(例如0)。

答案 1 :(得分:0)

您是否需要像这样的固定条件排序?

select name
from t1
order by
    case name
        when 'X' then 1
        when 'A' then 2
        when 'D' then 3
        when 'Z' then 4
        else 5
    end,
    name