Skip to main content

Command Palette

Search for a command to run...

MSSQL - ORDER BY 條件式

MSSQL 針對 ORDER BY 指定條件之筆記。

Updated
2 min read

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 遞增

  1. 這裡要分兩段式,先強制讓 id = 5 為最後一筆並遞減排序
  2. 再將調整後之 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 遞減

  1. 這裡一樣分兩段式,先強制讓 id = 5 為第一筆並遞增
  2. 再將調整後之 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 遞減

  1. 這裡一樣分兩段式,先強制讓 id = 5 為最後一筆
  2. 再將調整後之 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

1 views

Git

Part 1 of 50