深入浅出:学习MSSQL中的CASE语句

了解CASE语句

CASE语句是一种有用的控制结构,它在SQL中允许我们根据特定条件执行特定的操作。该语句类似于其他编程语言中的switch语句,允许我们把一个长的逻辑结构替换为一些更短的SQL代码。

从简单的角度来看,CASE语句旨在根据不同的条件执行不同的操作。具体来说,它允许我们根据列值、表达式或函数结果做出决定,然后执行相应的操作。

在MSSQL中,CASE语句提供了一种拓展SELECT语句的灵活性,可以通过它生成计算字段和自定义输出值。

基本语法

在MSSQL中,CASE语句的基本语法如下:

CASE expression 

WHEN value1 THEN result1

WHEN value2 THEN result2

...

WHEN valueN THEN resultN

[ELSE else_result]

END

在这个语法结构中,expression表示表达式,其结果可以与每个WHEN子句中的value进行比较。如果该表达式与任何一个value相符,则返回相应的result。如果它不匹配任何一个value,它将返回ELSE子句中的else_result。如果没有else_result,它将返回NULL值。

使用示例

案例:根据成绩生成等级

在这个示例中,我们根据学生的分数生成一个等级。具体来说,分数大于等于90时为A,大于等于80且小于90时为B,大于等于70且小于80时为C,大于等于60且小于70时为D,小于60时为F。

SELECT grade,

CASE

WHEN grade >= 90 THEN 'A'

WHEN grade >= 80 AND grade < 90 THEN 'B'

WHEN grade >= 70 AND grade < 80 THEN 'C'

WHEN grade >= 60 AND grade < 70 THEN 'D'

ELSE 'F'

END AS 'Grade Range'

FROM Grades;

在这个查询中,我们使用了SELECT语句和CASE语句从Grades表中生成新的计算字段。我们根据每个学生的分数计算其所在的等级,并将结果显示在Grade Range列中。

案例:根据日期生成季节

在这个示例中,我们根据日期生成一个季节。具体来说,我们将一年中的四个季节定义如下:

春季:3月1日至5月31日

夏季:6月1日至8月31日

秋季:9月1日至11月30日

冬季:12月1日至2月28日或29日

SELECT date,

CASE

WHEN date BETWEEN '03-01' AND '05-31' THEN 'Spring'

WHEN date BETWEEN '06-01' AND '08-31' THEN 'Summer'

WHEN date BETWEEN '09-01' AND '11-30' THEN 'Fall'

ELSE 'Winter'

END AS 'Season'

FROM Dates;

在这个查询中,我们使用了SELECT语句和CASE语句从Dates表中生成新的计算字段。我们首先检查每个日期是否在以下日期范围内,然后分配相应的季节值。春季从3月1日到5月31日,夏季从6月1日到8月31日,秋季从9月1日到11月30日,而冬季从12月1日到2月28日或29日。

案例:在查询中使用CASE语句

在这个示例中,我们根据发票总额生成一个新列并对其进行分类。

SELECT 

InvoiceID,

TotalDue,

CASE

WHEN TotalDue > 10000 THEN 'High'

WHEN TotalDue > 5000 THEN 'Medium'

ELSE 'Low'

END AS 'SalesBucket'

FROM Invoices;

在这个查询中,我们首先选择InvoiceID和TotalDue两列,然后使用CASE语句检查每个发票的TotalDue是否符合以下条件:如果TotalDue大于10000,则分配到High组;如果大于5000但小于等于10000,则分配到Medium组;否则,分配到Low组。

结束语

在本篇文章中,我们深入学习了MSSQL中的CASE语句,并通过实际案例对其进行了演示。CASE语句是一种非常有用的控制结构,允许我们在SQL中做出选择,并根据某些特定的条件执行相应的操作。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签