MSSQL - ORDER BY 條件式
MSSQL 針對 ORDER BY 指定條件之筆記。
MSSQL 針對 ORDER BY 指定條件之筆記。
在 MSSQL 中 ORDER BY 是很常用到的,
但常常因為奇怪的需求(疑),需要特別將某項目指定排序。
以下為 ORDER BY 搭配 Case When 之應用:
預設查詢
SELECT * FROM Item
id
ItemName
1
血管攝影
2
支氣管鏡
3
心藏導管及造影
4
小兒型葉克膜
5
電腦斷層掃描
6
多人高壓氧艙
7
血液透析
8
核磁共振
9
一般型葉克膜
(i)指定查詢
條件狀況 - 讓 id = 5 (電腦斷層掃描) 排序為最後一筆,其餘依 id 遞增
- 1 -> Last
- 0 -> First
SELECT * FROM Item ORDER BY Case WHEN id = 5 THEN 1 END ASC
id
ItemName
1
血管攝影
2
支氣管鏡
3
心藏導管及造影
4
小兒型葉克膜
6
多人高壓氧艙
7
血液透析
8
核磁共振
9
一般型葉克膜
5
電腦斷層掃描
(ii)指定查詢
條件狀況 - 讓 id = 5 (電腦斷層掃描) 排序為第一筆,其餘依 id 遞增
- 這裡要分兩段式,先強制讓 id = 5 為最後一筆並遞減排序
- 再將調整後之 id 遞增排序(倒回來)
SELECT * FROM Item ORDER BY Case WHEN id = 5 THEN 1 END DESC ,id ASC
id
ItemName
5
電腦斷層掃描
1
血管攝影
2
支氣管鏡
3
心藏導管及造影
4
小兒型葉克膜
6
多人高壓氧艙
7
血液透析
8
核磁共振
9
一般型葉克膜
(iii)指定查詢
條件狀況 - 讓 id = 5 (電腦斷層掃描) 排序為最後一筆,其餘依 id 遞減
- 這裡一樣分兩段式,先強制讓 id = 5 為第一筆並遞增
- 再將調整後之 id 遞減回來排序
SELECT * FROM Item ORDER BY Case WHEN id = 5 THEN 0 END ASC ,id DESC
id
ItemName
9
一般型葉克膜
8
核磁共振
7
血液透析
6
多人高壓氧艙
4
小兒型葉克膜
3
心藏導管及造影
2
支氣管鏡
1
血管攝影
5
電腦斷層掃描
(iv)指定查詢
條件狀況 - 讓 id = 5 (電腦斷層掃描) 排序為第一筆,其餘依 id 遞減
- 這裡一樣分兩段式,先強制讓 id = 5 為最後一筆
- 再將調整後之 id 遞減回來排序
SELECT * FROM Item ORDER BY Case WHEN id = 5 THEN 1 END DESC ,id DESC
id
ItemName
5
電腦斷層掃描
9
一般型葉克膜
8
核磁共振
7
血液透析
6
多人高壓氧艙
4
小兒型葉克膜
3
心藏導管及造影
2
支氣管鏡
1
血管攝影
以上為 ORDER BY 搭配 CASE WHEN 之應用
參考資料:Use SQL to query in order except the first record
有勘誤之處,不吝指教。ob'_'ov




