SQL数据库学习

case when

2021-06-17  本文已影响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 的一种简略写法。

上一篇下一篇

猜你喜欢

热点阅读