T-SQL CASE表达式

CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值。注意,CASE是一个表 达式,而不是一条语句;也就是说,不能用它来控制活动的流程,也不能根据条件逻辑来做某些处理。相反,它只是根据条件逻辑来返回某个值。因为CASE是一个标量表达式,所以它可以支持任何标批表达式(如SELECT、WHERE、HAVING,以及ORDERBY 子句)、CHECK约束,等等。CASE表达式有两种格式:简单表达式和搜索表达式 。

 

一.简单表达式

CASE简单格式将一个值(或一个标量表达式)与一组可能的取值进行比较, 并返回第一个匹配的结果。如果列表中没有值等于测试值 , CASE表达式就返回其ELSE子句(如果存在)中列出的 值。如果CASE 表达式中没有ELSE子句, 则默认将其视为ELSE NULL。以下代码做个简单示例。

SELECT productid, productname, categoryid, 
    CASE categoryid
        WHEN 1 THEN'Beverages' 
        WHEN 2 THEN'Condiments' 
        WHEN 3 THEN'Confections' 
        WHEN 4 THEN'Dairy Products' 
        WHEN 5 THEN'Grains/Cereals' 
        WHEN 6 THEN'Meat/Poultry' 
        WHEN 7 THEN'Produce' 
        WHEN 8 THEN'Seafood' 
        ELSE 'unknown category' 
    END AS categoryname
FROM Production.Products;

假如查询Sales.OrderValues先根据val的逻辑顺序生成3个组,再把组的编号转换成组的描述信息(Low、Medium,以及High):

SELECT orderid, custid, val, 
    CASE NTILE(3) OVER(ORDER BY val)
        WHEN l THEN    'Low' 
        WHEN 2 THEN    'Medium' 
        WHEN 3 THEN    'High' 
        ELSE 'Unknown' 
    END AS titledesc 
FROM Sales.Ordervalues ORDER BY val; 

 

二.搜索表达式

CASE 简单表达式只有一个测试值(或表达式),它紧跟在 CASE 关键字后面,与 WHEN子句中的一组可能值进行比较。CASE 搜索表达式要更灵活些,它可以在 WHEN 子句中指定谓词或逻辑表达式, 而不限于只进行相等性比较。 CASE 搜索表达式返回结果为 TRUE 的第一个 WHEN 逻辑表达式所关联的 THEN 子句中指定的值。 如果没有任何WHEN 表达式结果为 TRUE, CASE 表达式就返回 ELSE 子句中出现的值 (如果没有指 定 ELSE 子句, 则返回 NULL) 。例如, 以下查询根据商品的价格是否小于 1 000.00、在 1 000.00 到 3 000.00 之间、 或者大于 3 000.00 而生成相应的价格描述:

SELECT orderid, custid, val, 
    CASE
        WHEN val < 1000. 00                        THEN'Less then 1000' 
        WHEN val BETWEEN 1000.00 AND 3000.00      THEN'Between 1000 and 3000' 
        WHEN val > 3000.00                         THEN'More than 3000' 
    ELSE 'Unknown' 
    END AS valuecategory 
FROM Sales.OrderValues;

可以看到, 每个 CASE 简单表达式都可以转换成 CASE 搜索表达式, 但并非所有情况都有必要使用 CASE 搜索表达式。通过这几个例子可以对CASE表达式有大致了解,虽然从这些例子的表面可能看不到 CASE 表达式的独到之处, 但它确实是一种非常强大和实用的语言元素。

 

 

好了,本篇文章就介绍到这儿,欢迎大家留言交流;喜欢或有帮助到您的话,点个赞或推荐支持一下!

转载于:https://www.cnblogs.com/johnvwan/p/9460093.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值