SQL IIF 函數教學:條件式查詢的實用技巧與最佳實務

本篇全面解析 SQL IIF 函數,從語法說明、與 CASE WHEN 的比較、到各種實用案例與常見錯誤,幫助專案經理、資料分析師與知識工作者精通條件式查詢,提升資料處理效率。

Notion 新創專屬 3 個月免費福利| 官方合作夥伴限定

經本站專屬連結申請,即享 3 個月 Notion Plus + AI 無限免費 (市價 $6,000 美元)! 務必保留推薦碼 venturer ,否則不符資格。 全程免費,無需信用卡。需用公司 Email 與有效公司網站。
免費使用

200+模板自動化工作流程

從數據到成果,只需一步 — 用Monday代替Excel,效率倍增!
免費使用

AI智能團隊協作

AI驅動的ClickUp超越Excel,讓工作更精準快速!
免費使用

什麼是 SQL IIF 函數?

SQL IIF 函數是一種條件式運算工具,讓你能在查詢中根據判斷結果回傳不同的值。它的設計靈感來自多數程式語言的 if-else 結構,讓 SQL 查詢語句更簡潔易讀。IIF 函數自 SQL Server 2012 版本起支援,主要用於 T-SQL 語法。

支援資料庫版本與相容性

  • SQL Server:IIF 函數僅支援 SQL Server 2012 及以上版本。
  • MySQL、PostgreSQL、Oracle:這些資料庫不支援 IIF,但可用 CASE WHEN 或其他條件運算子替代。

適用情境

IIF 適用於需要根據單一條件快速分類、標記、計算的場景,例如薪資分類、訂單狀態判斷、資料清洗等。

IIF 函數語法與參數說明

IIF 函數的基本語法如下:

IIF ( boolean_expression, true_value, false_value )
  • boolean_expression:任何可產生布林值(TRUE/FALSE)的表達式。
  • true_value:當條件為 TRUE 時回傳的值。
  • false_value:當條件為 FALSE 時回傳的值。

參數型別與注意事項

  • 型別一致性:true_value 與 false_value 必須型別相容,否則會出現錯誤。
  • NULL 處理:若 boolean_expression、true_value 或 false_value 為 NULL,結果可能為 NULL,需特別注意。
  • 巢狀使用:IIF 可巢狀多層,但可讀性與維護性會降低。

語法範例

SELECT IIF(Salary > 5000, '高薪', '低薪') AS SalaryCategory
FROM Employees

IIF 與 CASE WHEN 的比較

IIF 與 CASE WHEN 都能實現條件判斷,但在語法、適用時機與效能上有些差異。

比較項目 IIF 函數 CASE WHEN 陳述式
語法簡潔度 簡潔,適合單一條件 較冗長,適合多條件
支援版本 SQL Server 2012+ 幾乎所有主流 SQL 資料庫
多重條件 巢狀 IIF,易讀性較差 多重 WHEN THEN,結構清晰
型別一致性 true/false 值需型別相容 每個 THEN/ELSE 值需型別一致
效能 與 CASE WHEN 相近 與 IIF 相近
可維護性 複雜條件下較差 較佳

語法對照

IIF 範例:

SELECT IIF(Score >= 60, '及格', '不及格') AS Result FROM Students

CASE WHEN 範例:

SELECT CASE WHEN Score >= 60 THEN '及格' ELSE '不及格' END AS Result FROM Students

適用建議

  • 單一簡單條件:建議用 IIF。
  • 多重條件或複雜邏輯:建議用 CASE WHEN。

IIF 函數實用範例

基本條件判斷

情境說明:人資部門需依據員工薪資分類。

SELECT Name, Salary,
       IIF(Salary > 5000, '高薪', '低薪') AS SalaryCategory
FROM Employees

結果展示

Name Salary SalaryCategory
王小明 6000 高薪
李小華 4500 低薪

日期比較應用

情境說明:物流部門需判斷訂單是否延遲交貨。

SELECT OrderID, OrderDate, DeliveryDate,
       IIF(DeliveryDate > OrderDate, '延遲', '準時') AS DeliveryStatus
FROM Orders

結果展示

OrderID OrderDate DeliveryDate DeliveryStatus
1001 2023-05-01 2023-05-03 延遲
1002 2023-05-02 2023-05-02 準時

嵌套 IIF 實例

情境說明:學校需根據分數給學生評等。

SELECT Name, Score,
       IIF(Score >= 90, 'A',
           IIF(Score >= 80, 'B',
               IIF(Score >= 70, 'C',
                   IIF(Score >= 60, 'D', 'F')))) AS Grade
FROM Students

結果展示

Name Score Grade
張三 92 A
李四 85 B
王五 73 C
趙六 58 F

注意:巢狀 IIF 雖然可行,但條件多時建議改用 CASE WHEN 以提升可讀性。

與其他函數結合應用

情境說明:倉儲管理需標示庫存狀態,並處理 NULL 值。

SELECT ProductName, UnitsInStock,
       IIF(ISNULL(UnitsInStock, 0) = 0, '缺貨', '有貨') AS StockStatus
FROM Products

結果展示

ProductName UnitsInStock StockStatus
A產品 10 有貨
B產品 NULL 缺貨

IIF 函數使用注意事項

常見錯誤與排解

  • 型別不一致
    錯誤訊息:Conversion failed when converting the varchar value ‘高薪’ to data type int
    解法:確保 true_value 與 false_value 型別相容。

  • NULL 處理
    若 boolean_expression、true_value 或 false_value 為 NULL,結果可能為 NULL。可搭配 ISNULL 或 COALESCE 處理。

  • 巢狀過多
    巢狀 IIF 超過 10 層會降低可讀性,建議複雜邏輯改用 CASE WHEN。

  • 效能考量
    IIF 與 CASE WHEN 效能相近,但在大量資料或複雜條件下,CASE WHEN 更易於優化與維護。

可維護性建議

  • 單一條件:可用 IIF,語法簡潔。
  • 多重條件:建議用 CASE WHEN,結構更清晰。

常見問題(FAQ)

IIF 與 CASE WHEN 有什麼差異?

IIF 是 CASE WHEN 的簡化語法,適合單一條件判斷。CASE WHEN 適合多重條件與複雜邏輯,支援所有主流 SQL 資料庫。

IIF 可以巢狀幾層?

理論上可多層巢狀,但超過 10 層會嚴重影響可讀性與維護性。建議多條件時使用 CASE WHEN。

IIF 支援哪些資料庫?

僅支援 SQL Server 2012 及以上版本。MySQL、PostgreSQL、Oracle 等資料庫不支援 IIF,需用 CASE WHEN 替代。

IIF 如何處理 NULL 值?

若條件或回傳值為 NULL,結果也可能為 NULL。建議搭配 ISNULL、COALESCE 等函數處理。

IIF 效能如何?

IIF 與 CASE WHEN 效能相近。大量資料或複雜條件時,CASE WHEN 更易於優化。

總結與進階學習建議

SQL IIF 函數能讓你在查詢中快速實現條件判斷,語法簡潔,適合單一條件分類、標記等場景。面對多重條件或複雜邏輯時,建議選用 CASE WHEN 以提升可讀性與維護性。熟練運用 IIF,不僅能優化資料查詢,也有助於提升專案管理、報表分析等工作效率。

若你經常需要進行資料查詢、報表分類或自動化資料處理,建議可結合 Monday.comClickUp 等現代化專案管理工具,搭配 SQL 查詢結果自動化流轉,讓團隊協作與資料分析更高效。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

✨ 讓專案管理變簡單,團隊更強大!

在專案推進的每一步,效率就是競爭力。monday.com 整合進度追蹤、團隊協作與資源分配,讓你隨時掌握全局、快速解決問題。
全球18萬家專業團隊已經採用,你還在等什麼?