case when

作者: 践行数据分析 | 来源:发表于2021-06-17 16:25 被阅读0次

1.CASE 具有两种格式,简单 CASE 函数和 CASE 搜索函数。

2. 简单 CASE 函数

语法

CASE column

WHEN <condition> THEN value

WHEN <condition> THEN value

......

ELSE value END

示例

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '女'

ELSE '其他' END

3.CASE 搜索函数

语法

CASE

WHEN <condition> [,<condition>] THEN value

WHEN <condition> [,<condition>] THEN value

......

ELSE value END

示例

CASE WHEN sex = '1' THEN '男'

WHEN sex = '2' THEN '女'

ELSE '其他' END

简单 CASE 函数重在简洁,但是它只适用于这种单字段的单值比较

CASE 搜索函数的优点在于适用于所有比较(包括多值比较)的情况。

例如

CASE WHEN sex = '1' AND age>18 THEN '成年男性'

WHEN sex = '2' AND age>18 THEN '成年女性'

ELSE '其他' END

注意:CASE 函数只返回第一个符合条件的值,剩下的 CASE 部分将会被自动忽略。

比如说,下面这段 SQL,你永远无法得到“第二类”这个结果

CASE WHEN Type IN ('a','b') THEN '第一类'

WHEN Type IN ('a') THEN '第二类'

ELSE '其他类' END

4.CASE 行转列

CASE 用的比较广泛的功能就是行转列,就是将记录行里的数据按条件转换成具体

的列。 看如下的一个示例:

现在我们想实现这样的功能,就是将各学科作为单独的列来显示各个学生各科的成

绩。我们可以对课程里的记录做如下的行列转换:

SELECT 姓名,

MAX(CASE 课程 WHEN N'语文' THEN 分数 ELSE 0 END) 语文,

MAX(CASE 课程 WHEN N'数学' THEN 分数 ELSE 0 END) 数学,

MAX(CASE 课程 WHEN N'物理' THEN 分数 ELSE 0 END) 物理

FROM Score

GROUP BY 姓名

执行结果如下:

5. 行转列新方法

这样就很好的完成了行列的转换了,当然这只是一个比较简单的例子,SQL Server 2005 版

之后有单独的行列转换功能 PIOVT,以下查询同样可以得到上面的结果:

SELECT * FROM Score

PIVOT( MAX(分数) FOR 课程 IN (语文,数学,物理)) A

其中 FOR 后面的是我们即将进行行转列的列部分

IN 里面的是我们行转列之后的列

MAX 是聚合 IN 里面的内容,也可以是其他聚合函数:SUM,MIN,COUNT 等

PIVOT 写法比较固定,是 CASE WHEN 的一种简略写法。

相关文章

  • musql的case-when-then语句

    musql的case-when-then语句 SELECT *,(CASE WHEN username='ee' ...

  • case ... when ...

    使用case...when...时,若先后给同一种情形赋不同的值,则以先赋的值为准。 理论上不应出现这种写法。

  • case when

    1.CASE 具有两种格式,简单 CASE 函数和 CASE 搜索函数。 2. 简单 CASE 函数 语法 CAS...

  • 2018-11-13sql的查询判断

    我们在sql中的 case when 里面可以叠加相同的语句, case when 条件 then case wh...

  • SQL数据库

    1.case when 条件 then 结果 case 条件 when 结果 ... else 结果 end (条...

  • mysql workbench Day 4

    摘要 case when if inner join table 简写 union 1.case when 注意e...

  • 【MySql】- CASE WHEN

    MySql 触发器里的流程控制语句: CASE WHEN CASE WHEN 语法有两种: 简单函数。CASE [...

  • mysql--CASE WHEN 统计多个字段

    mysql--CASE WHEN 统计多个字段 本文介绍case when case 包含两种表达格式: 第一种:...

  • SQL常用命令

    substring: ( expression, start, length ) case case when c...

  • mysql 流程控制语句 笔记!

    一般查询用法: 批量更新用法: case when: case null when 表达式 then 执行...

网友评论

    本文标题:case when

    本文链接:https://www.haomeiwen.com/subject/vjycyltx.html