龙空技术网

数据库大师成长日记:在SQL中如何正确使用Case语句

网云技术 578

前言:

如今看官们对“java中case语句用法”都比较关切,我们都需要了解一些“java中case语句用法”的相关内容。那么小编同时在网络上搜集了一些有关“java中case语句用法””的相关文章,希望各位老铁们能喜欢,各位老铁们一起来了解一下吧!

经常使用SQLServer的朋友们,我们在些SQL脚本时,经常会碰到依据字段的值返回不同的结果的情况,这个时候,SQL的Case语句就派上用场了。今天我们就认真梳理一下Case语句的语法结构和简单的应用场景。

SQL Server的Case语句

演示数据准备

仍然用我之前用的业务销售表为例来演示:

declare @sale table( FName nvarchar(50), FDistrict nvarchar(50), FAmount decimal(28,10));insert into @salevalues('张三','北京',20000),('张三','上海',50000),('张三','深圳',40000),('张三','广州',30000),('李四','北京',30000),('李四','上海',50000),('李四','深圳',40000),('李四','广州',10000),('王二','北京',70000),('王二','上海',10000),('王二','深圳',60000),('王二','广州',20000),('马六','北京',80000),('马六','上海',20000),('马六','深圳',70000),('马六','广州',60000);

运行结果如下图所示:

准备演示数据

case when ... then ... else ... end

case when ... then ... else ... end是case语句最常用的一种用法,语法格式如下:

case when 条件表达式1 then 返回值1when 条件表达式2 then 返回值2.......else 默认返回值 end

这是一种直接按条件分支的写法,条件是一个表达式,不是具体的值。不同条件返回不同的值。

结合演示数据,比如我们要对销售额进行分流,低于20000的不合格、20000到40000以下的为合格、40000到60000以下的为良好、60000及以上的为优秀,那对应的SQL脚本可以这样写:

select  FName as F姓名, FDistrict as F区域,	 FAmount as F销售额, (case  when FAmount<20000 then '不合格' when FAmount>=20000 and FAmount<40000 then '合格' when FAmount>=40000 and FAmount<60000 then '良好' when FAmount>=60000 then '优秀' else '未知' end) as F成绩from @sale;

运行结果如下图所示:

运行结果

可以看出,Case语句后面紧跟的条件将FAmount不同的区间表达式做了区分,各自返回不同的值,else语句不是必须的,但最后的结尾一定要用上end标识。

case ... when ... then ... else ... end

case ... when ... then ... else ... end是一种根据对预设项目的值的列表进行分支的写法,分支的条件是具体的值,而不是表达式。语法格式如下:

case 预设项目when 条件值1 then 返回值1when 条件值2 then 返回值2.......else 默认值 end

结合演示数据,比如我们要找出销售的大区,应该这样写:

select  FName as F姓名, FDistrict as F区域,	 FAmount as F销售额,	 (case FDistrict when '北京' then '华北' when '上海' then '华东' when '深圳' then '华南'  when '广州' then '华南' else '未知' end) as F大区from @sale;

运行结果如下图所示:

运行结果

可以看出,Case语句首先基于FDistrict字段为预设项目,根据不同的值返回不同的结果。两种模式的本质区别就是,一种是根据不同表达式分支、一种是基于预设项目的不同值分支。

希望对您有所帮助!

标签: #java中case语句用法 #数据库区间表达式