【你也能从零基础学会网站开发】 一分钟让你学会在SQL Server 2000中使用CASE、WHEN、ELSE、END语句,原来这么简单!

🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注

CASE、WHEN、ELSE、END 概述

通俗一点的说 CASE、WHEN、ELSE、END 这些关键字在我们的SQL Server 2000 中是用来在SQL语句中实现逻辑条件判断的。

这些关键字可以让我们根据某些条件来决定返回什么值,就像我们开发编程语言中的if-else语句一样

具体每一个关键字的含义如下表:

关键字描述
CASE(案例)一个条件语句的开始关键字
WHEN(何时)CASE后面跟着一个WHEN条件,如果这个条件为真,就执行对应的操作
THEN它是紧跟在WHEN条件后面,表示如果WHEN的条件为真,则返回THEN后面的表达式或者值
ELSE如果所有的WHEN条件都不成立,就返回ELSE后面的表达式或者值
END表示整个CASE语句的结束

应用场景

我们先来看一个简单的案例, SQL如下:

CREATE TABLE employees (
    eid INT PRIMARY KEY IDENTITY,     --员工ID
    username NVARCHAR(100) NOT NULL,  -- 员工姓名
    salary DECIMAL(10, 2) NOT NULL    -- 员工薪水
)


INSERT INTO employees (username, salary) VALUES ('张三', 6000.00);  
INSERT INTO employees (username, salary) VALUES ('李四', 4000.00); 
INSERT INTO employees (username, salary) VALUES ('王五', 2500.00); 
INSERT INTO employees (username, salary) VALUES ('赵六', 5500.00); 
INSERT INTO employees (username, salary) VALUES ('孙七', 2900.00); 

如图


问题需求

现在问题来了,我们需要根据薪水来给员工划分等级~并且查询出来的每个员工都要显示这个等级

具体条件如下:

薪水大于5000的,级别为
薪水在3000到5000之间的,级别为
薪水小于3000的,级别为

SQL如下

SELECT username,salary,
CASE
 WHEN salary > 5000 THEN '高等'
 WHEN salary > 3000 and salary < 5000 THEN '中等'
 WHEN salary < 3000 THEN '低等'
 ELSE '超级差的人'
END AS '等级显示'
FROM employees
ORDER BY salary DESC;

如图


这里在查询中我们使用了一个别名给CASE命名,这样查询结果中就会有一个新的临时等级显示列l来显示每个员工的薪水级别!

怎么样是不是很简单~ 我们再看一个比较贴近实际开发的例子

我们创建一个名为`SalesRecords``的销售记录表,它包含以下字段:

sid:销售记录的唯一标识符
pid:产品的唯一标识符
saleAmount:销售金额
saleDate:销售日期
region:销售区域

如下

-- 创建数据表
CREATE TABLE SalesRecords (
    sid INT PRIMARY KEY IDENTITY,
    pid VARCHAR(255) NOT NULL,
    SaleAmount DECIMAL(10, 2) NOT NULL,
    SaleDate DATETIME NOT NULL,
    region VARCHAR(50) NOT NULL
);

-- 插入数据
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 1500.00, '2023-10-01', '北部新区');
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 2000.00, '2023-10-02', '西南地区');
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 3000.00, '2023-10-03', '东南亚地区');
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 2500.00, '2023-10-04', '西北地区');
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 1800.00, '2023-10-05', '北部新区');
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 3500.00, '2023-10-06', '西北地区');
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 1200.00, '2023-10-07', '东南亚地区');
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 500.00,  '2023-10-09', '西南地区');
INSERT INTO SalesRecords (pid, SaleAmount, SaleDate, region) VALUES (newid(), 600.00, '2023-10-10', '北部新区');

如图

那么现在我们要查询根据销售金额来计算销售提成金额并且把提成之后的金额显示出来!

具体提成的比例条件如下

销售金额小于1000元的,提成比例为5%
销售金额在1000元到3000元之间的,提成比例为10%
销售金额大于3000元的,提成比例为15%

那么这里我们依旧可以使用CASE语句来实现这个逻辑,并计算每个销售记录的提成金额!

如下

SELECT 
 sid,
 SaleAmount,
 SaleDate,
 region,
 CASE 
  WHEN SaleAmount < 1000 THEN SaleAmount * 0.05
  WHEN SaleAmount BETWEEN 1000 AND 3000 THEN SaleAmount * 0.10
  ELSE SaleAmount * 0.15
 END AS '提成金额'
FROM 
SalesRecords ORDER BY SaleAmount DESC;

如图


这样我们是不是就可以很方便的在查询结果中包含每个销售记录及其对应的提成金额了!

当然如果说你想要把计算出来的结果进行保存或者更新也是可以的, 我们使用update更新语句把这个结果加入到一个新的字段中就OK了!

就按照上面这个为例我们先添加一个提成字段SalesRecords表

如下

ALTER TABLE SalesRecords ADD Commission DECIMAL(10, 2);

然后我们结合CASE语句执行计算更新操作来同时更新提成字段Commission的值

如下

UPDATE SalesRecords
SET Commission = CASE 
   WHEN SaleAmount < 1000 THEN SaleAmount * 0.05
   WHEN SaleAmount BETWEEN 1000 AND 3000 THEN SaleAmount * 0.10
   ELSE SaleAmount * 0.15
 END;

如图

然后我们直接查询一下这个SalesRecords表

如图

这样就永久的保存了想要的数据了!

"👍点赞" "✍️评论" "收藏❤️"

大家的支持就是我坚持下去的动力!

如果以上内容有任何错误或者不准确的地方,🤗🤗🤗欢迎在下面 👇👇👇 留个言指出、或者你有更好的想法,
欢迎一起交流学习❤️❤️💛💛💚💚

更多好玩 好用 好看的干货教程可以点击下方关注❤️微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值