sql case when then 用法

本文详细解析了SQL中Case语句的多种用法,包括如何根据字段值转换显示内容,处理NULL值,以及在不同场景下如何灵活运用Case语句进行数据转换。通过具体实例,如性别字段的数值转文本显示,帮助读者理解和掌握Case语句的应用。

sql case when then 用法

简单case语句1
修改数据库的字段名A若值为1显示是,值为2显示否, 前台显示字段B(是/否),字段A(1/2)
case 字段名A when 1 then ‘是’ when 2 ‘否’ end 字段名B;

简单case语句2
字段名B可不写,表示修改的是A的值;若加B表示B为(优秀/中/差)
case A when 1 then ‘优秀’ when 2 ‘中’ else ‘差’ end ;

判断是否为null
case when A is null then '空’ else '不为空‘ end;

else 后也可以写为null
case A when 1 then ‘优秀’ when 2 ‘中’ else null end ;

如后台字段为sex 值为1/2
前台需要显示sex字段男/女

方法:
Java sql:
select case sex when 1 then ‘男’ when 2 then ‘女’ end sexname ,sex from TABLE;

js:(bootstrap框架)
{
field : ‘sex’,
title : ‘奖罚值’,
// 隐藏该列(true为显示)
visible : false,
// 开启排序
sortable : true
}, {
field : ‘sexname’,
title : ‘奖罚’,
visible : true,
// 开启排序
sortable : true
},

<think> 我们被要求解释SQLCASE WHEN THEN用法,并且参考了提供的引用内容。用户的问题集中在CASE表达式的用法上,我们需要结合引用内容进行详细说明。 根据引用[1][2][3][4][5],CASE表达式有两种形式:简单CASE表达式和搜索CASE表达式。 1. 简单CASE表达式:将一个表达式与多个值进行比较,类似于switch-case。 2. 搜索CASE表达式:可以表达更复杂的条件,每个WHEN子句都是一个布尔表达式。 我们将按照以下结构组织答案: 1. 两种形式的语法和示例。 2. 常见应用场景(包括引用中提到的:列值转换、分段统计、嵌套使用等)。 3. 注意事项(如引用[2]中提到的错误写法)。 同时,我们会结合引用内容给出示例,并在适当位置标注引用来源。 最后,按照要求生成相关问题。 </think> ### SQLCASE WHEN THEN用法详解 `CASE WHEN THEN`是SQL中的**条件表达式**,用于实现逻辑分支处理。它有两种形式:**简单CASE表达式**和**搜索CASE表达式**,以下结合引用内容详细说明: --- #### 一、基本语法 1. **简单CASE表达式**(直比较值) ```sql CASE 列名 WHEN 值1 THEN 结果1 WHEN 值2 THEN 结果2 ... ELSE 默认结果 END ``` **示例**(引用[1][4]): ```sql SELECT name, CASE sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '其他' END AS gender FROM users; ``` → 将数字编码的性别转为中文描述[^1][^4]。 2. **搜索CASE表达式**(支持复杂条件) ```sql CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ... ELSE 默认结果 END ``` **示例**(引用[2][3]): ```sql SELECT id, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 60 THEN 'C' ELSE 'D' END AS grade FROM exams; ``` → 根据分数区间划分等级[^2][^3]。 --- #### 二、核心应用场景 1. **数据转换与标准化** 将代码值转为可读文本(如状态码转中文): ```sql SELECT order_id, CASE status WHEN 0 THEN '未支付' WHEN 1 THEN '已发货' WHEN 2 THEN '已完成' END AS status_text FROM orders; ``` 2. **分段统计与聚合计算**(引用[5]) 配合聚合函数实现分组统计: ```sql SELECT SUM(CASE WHEN age < 18 THEN 1 ELSE 0 END) AS under_18, SUM(CASE WHEN age BETWEEN 18 AND 65 THEN 1 ELSE 0 END) AS adult, SUM(CASE WHEN age > 65 THEN 1 ELSE 0 END) AS senior FROM users; ``` → 统计不同年龄段人数[^5]。 3. **动态列生成** 在单行结果中生成多列数据: ```sql SELECT product_id, MAX(CASE WHEN year = 2022 THEN sales END) AS sales_2022, MAX(CASE WHEN year = 2023 THEN sales END) AS sales_2023 FROM sales_data GROUP BY product_id; ``` 4. **NULL值安全处理** **注意**:直`WHEN NULL`会失效(引用[2]): ```sql -- 错误写法(NULL需用IS NULL判断) CASE col1 WHEN NULL THEN 'wrong' END -- 正确写法 CASE WHEN col1 IS NULL THEN 'N/A' END ``` → 避免逻辑错误[^2]。 --- #### 三、高级用法 1. **嵌套CASE表达式**(引用[2]) 实现多层级逻辑: ```sql SELECT id, CASE WHEN type = 'A' THEN CASE WHEN value > 100 THEN 'High' ELSE 'Low' END WHEN type = 'B' THEN 'Medium' END AS priority FROM items; ``` → 结合业务规则分层判断[^2]。 2. **在UPDATE语句中修改数据** 根据条件更新特定列: ```sql UPDATE products SET price = CASE WHEN category = 'Electronics' THEN price * 1.1 WHEN category = 'Books' THEN price * 0.9 ELSE price END; ``` --- #### 四、性能优化建议 1. **优先级原则**: CASE表达式按顺序执行,应将高频条件放在前面。 2. **避免过度嵌套**: 嵌套超过3层时考虑用临时表或业务逻辑拆分。 3. **ELSE子句必选**: 未匹配时默认返回`NULL`,显式声明`ELSE`可避免意外结果。 > 示例对比(引用[3]): > ![CASE WHEN对比示例](https://via.placeholder.com/400x150?text=CASE+WHEN+结果示例) > 左:原始数据 | 右:转换后结果[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值