Sql 基于列的Case表达式
2024-08-25 16:03:35
Case表达式可以用在 Select,update ,delete ,set,in,where ,order by,having子句之后,
只是case表达式不能控制sql程序的流程,只能作为基于列的逻辑使用
SELECT TOP CASE a.Id
WHEN THEN '骨性关节炎1'
WHEN THEN '骨性关节炎2'
WHEN THEN '骨性关节炎3'
ELSE '不知道'
END AS MyName
FROM [dbo].[Disease] a
ORDER BY a.Id
也可以这样写:
SELECT TOP MyName = CASE a.Id
WHEN THEN '骨性关节炎1'
WHEN THEN '骨性关节炎2'
WHEN THEN '骨性关节炎3'
ELSE '不知道'
END
FROM [dbo].[Disease] a
ORDER BY a.Id
case表达式分两种:
简单表达式:将某个表达式与一组简单表达式进行比较以确定结果
即:整个表达式只会取一列的值做相应的判断,
搜索表达式:计算一组布尔表达式以确定结果
上面的实例就是一个简单表达式
注意:then 后面的数据类型必须相同或者兼容,否则会报错
case搜索表达式:
SELECT CASE
WHEN r.[SystemName] = 'Administrators' THEN '管理员'
WHEN r.[SystemName] = 'Registered' THEN 'APP注册用户'
ELSE '不知道'
END AS MyName FROM [dbo].[Role] r
注意顺序:当第一个when后的表达式为true,则取第一个then后面的值,即使第二个when表达式也为true
CASE表达式在ORDER BY中的使用:
case表达式在order by 中可以将排序结果分类,使符合某些条件的行采用一种排序方式,符合另外另一种条件的行采用另一种排序方式
DECLARE @beforeTime DATETIME
SET @beforeTime = DATEADD(MONTH,-,GETDATE())
SELECT * FROM #result r ORDER BY
CASE WHEN r.CreatedOnUtc >= @beforeTime THEN r.HotCount END DESC ,
CASE WHEN r.CreatedOnUtc < @beforeTime THEN r.CreatedOnUtc END DESC
注意:这里每一条规则都要单独写一个case表达式,因为case表达式是基于列的,一个case表达式只能返回一个值,所以基于多少个值排序,就需要多少个case表达式
最新文章
- Java工具Eclipse
- js的小效果-图片放大镜效果
- 读书笔记_Effective_C++_条款四十二:了解typename的双重意义
- JAVA与.NET的相互调用——通过Web服务实现相互调用
- 浅谈C51内存优化
- Windows下配置PHP
- Java中间Map List Set和其他收藏品
- java系列--JSON数据的处理
- SPOJ - DISUBSTR 多少个不同的子串
- parcel和parcelable
- Excel 将A表的基础数据拼接到B表中来-三种方法: ctrl+回车, VLOOKUP()函数,宏
- 2、Flutter 填坑记录篇
- Beta冲刺 (1/7)
- LeetCode——13. Roman to Integer
- 树莓派学习笔记(5):成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)
- Java NIO和IO的区别(转)
- Python自动发邮件-yagmail库
- [置顶]使用scrapy_redis,自动实时增量更新东方头条网全站新闻
- 用python实现各种排序算法
- Linux学习1-创建虚拟机
热门文章
- BNUOJ-29365 Join in tasks 简单数学
- fscanf(格式化字符串输入)
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATI
- Oracle- 备份单表结构和单表数据
- Unable to read TLD ";META-INF/c.tld";错误
- ThinkPHP3.1快速入门(13)自动完成
- 关于unity3d播放flash动画,使用插件uniswf
- 期望-pku-oj-1055:Tree
- 面试题总结之C/C++/MISC
- Google实习面试归来