ORDER BY 子句中的 CASE WHEN THEN

THEN 後跟數字

對於SQL:bash

create table tb(col int);
insert tb
select 1 union all select 2 union all select 3;
 
/**實現二、一、3這樣排序**/
 
select *
from tb
order by
  case col when 2 then 0
           when 1 then 1
           when 3 then 2
           else        3
   end;
 
### ---------------- OUTPUT ---------------

col         
----------- 
2
1
3
 
(所影響的行數爲 3 行)
複製代碼

這裏能夠理解爲分組排序,好比說,學生排隊,凡是姓張的,咱們給他們貼個標籤「1」,凡是姓李的,咱們給他們貼個標籤「2」,凡是姓王的,咱們給他們貼個標籤「3」。而後按照 1 2 3 排序spa

THEN 後跟列名

# table tt(bmid int,boardid int,parentid int)
select * from tt;

### ---------------- OUTPUT ---------------

bmid        boardid     parentid    
----------- ----------- ----------- 
1           1           9
2           2           17
5           3           18
9           0           0
15          0           0
16          4           17
17          0           0
18          0           0
5           3           18
複製代碼
select * from tt order by (case when parentid=0 then bmid else parentid end),parentid,bmid,boardid;

### ---------------- OUTPUT ---------------

bmid        boardid     parentid    
----------- ----------- ----------- 
9           0           0
1           1           9
15          0           0
17          0           0
2           2           17
16          4           17
18          0           0
5           3           18
5           3           18
複製代碼

而上一個SQL等同於.net

select (case when parentid=0 then bmid else parentid end) as myid, * 
from tt
order by myid,parentid,bmid,boardid;

### ---------------- OUTPUT ---------------

myid        bmid        boardid     parentid    
----------- ----------- ----------- ----------- 
9           9           0           0
9           1           1           9
15          15          0           0
17          17          0           0
17          2           2           17
17          16          4           17
18          18          0           0
18          5           3           18
18          5           3           18
複製代碼

參考資料:

相關文章
相關標籤/搜索