首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL CASE WHEN 条件判断:字段值分支执行不同逻辑

     編輯:程式設計綜合問答

需求描述

查询中需根据字段 dirid 值执行不同条件:

  • dirid = 43 → 执行条件 1
  • dirid = 44 → 执行条件 2

标准 CASE WHEN 语法

SELECT 
    d.*,
    CASE 
        WHEN d.D_DirectionID = 43 THEN '条件1结果'  -- 或具体表达式/子查询
        WHEN d.D_DirectionID = 44 THEN '条件2结果'
        ELSE '默认结果'
    END AS result_flag
FROM your_table d
-- 关联查询...

进阶用法

1. 搜索型 CASE (简单表达式)

CASE dirid 
    WHEN 43 THEN 'A'
    WHEN 44 THEN 'B'
    ELSE 'C'
END

2. 条件型 CASE (布尔表达式,更灵活)

CASE 
    WHEN dirid = 43 AND status = 1 THEN 'A'
    WHEN dirid = 44 OR priority > 5 THEN 'B'
    WHEN dirid IN (45, 46) THEN 'C'
    ELSE 'D'
END

3. 在 WHERE/ORDER BY 中使用

-- 动态排序
ORDER BY 
    CASE WHEN dirid = 43 THEN create_time END DESC,
    CASE WHEN dirid = 44 THEN priority END ASC;

-- 条件过滤
WHERE 1=1
  AND (dirid = 43 AND amount > 1000 
       OR dirid = 44 AND amount < 500)

4. 聚合函数配合条件统计

SELECT 
    COUNT(CASE WHEN dirid = 43 THEN 1 END) AS cnt_43,
    COUNT(CASE WHEN dirid = 44 THEN 1 END) AS cnt_44,
    SUM(CASE WHEN dirid = 43 THEN amount ELSE 0 END) AS sum_43
FROM direction_table;

数据库兼容性

数据库支持别名/变体
MySQL✅IF(), IFNULL()
PostgreSQL✅标准 SQL
Oracle✅DECODE() (旧语法)
SQL Server✅IIF() (2012+)
SQLite✅标准 SQL

性能提示

  • CASE 表达式在 SELECT 列表中对性能影响极小
  • WHERE 子句中复杂 CASE 可能阻碍索引使用,优先改写为 OR/IN
  • 大数据量条件聚合可考虑物化视图或汇总表
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved