首页 > 数据库 > 数据库开发技术 > SQL 案例分析:CASE 条件表达式
截至 2020 年入职年限不满 10 年的员工,男性员工的礼品为手表一块,女性员工的礼品为化妆品一套;
截至 2020 年入职年限满 10 年不满 15 年的员工,男性员工的礼品为手机一部,女性员工的礼品为项链一条;
截至 2020 入职年限满 15 年的员工,不论男女礼品统一为电脑一台。
-- Oracle、MySQL以及PostgreSQL
SELECT emp_name AS "员工姓名", hire_date AS "入职日期",
CASE
WHEN EXTRACT(YEAR FROM hire_date)> 2011 AND sex = '男' THEN '手表'
WHEN EXTRACT(YEAR FROM hire_date) > 2011 AND sex = '女' THEN '化妆品'
WHEN EXTRACT(YEAR FROM hire_date) > 2006 AND sex = '男' THEN '手机'
WHEN EXTRACT(YEAR FROM hire_date) > 2006 AND sex = '女' THEN '项链'
ELSE '电脑'
END AS "礼品"
FROM employee;
员工姓名|入职日期 |礼品
------|----------|---
刘备 |2000-01-01|电脑
关羽 |2000-01-01|电脑
张飞 |2000-01-01|电脑
...
廖化 |2009-02-17|手机
关平 |2011-07-24|手机
赵氏 |2011-11-10|项链
...
-- Microsoft SQL Server
SELECT emp_name AS "员工姓名", hire_date AS "入职日期",
CASE
WHEN DATEPART(YEAR, hire_date) > 2011 AND sex = '男' THEN '手表'
WHEN DATEPART(YEAR, hire_date) > 2011 AND sex = '女' THEN '化妆品'
WHEN DATEPART(YEAR, hire_date) > 2006 AND sex = '男' THEN '手机'
WHEN DATEPART(YEAR, hire_date) > 2006 AND sex = '女' THEN '项链'
ELSE '电脑'
END AS "礼品"
FROM employee;
-- SQLite
SELECT emp_name AS "员工姓名", hire_date AS "入职日期",
CASE
WHEN CAST(STRFTIME('%Y', hire_date) AS INT) > 2011 AND sex = '男'
THEN '手表'
WHEN CAST(STRFTIME('%Y', hire_date) AS INT) > 2011 AND sex = '女'
THEN '化妆品'
WHEN CAST(STRFTIME('%Y', hire_date) AS INT) > 2006 AND sex = '男'
THEN '手机'
WHEN CAST(STRFTIME('%Y', hire_date) AS INT) > 2006 AND sex = '女'
THEN '项链'
ELSE '电脑'
END AS "礼品"
FROM employee;
原文作者:SQL编程思想;如有侵权,请联系管理员删除。