對於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
# 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
複製代碼