了解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中做出选择,并根据某些特定的条件执行相应的操作。