T-SQL查询进阶--基于列的逻辑表达式www.129028.com金沙

日期:2020-04-29编辑作者:数据库

我们在开发过程中,经常需要针对一列,基于条件逻辑来返回一个值,那么,这时候就需要使用到CASE表达式了。

引言

     

       T-SQL不仅仅是一个用于查询数据库的语言,还是一个可以对数据进行操作的语言。基于列的CASE表达式就是其中一种,不像其他查询语句可以互相替代(比如用子查询实现的查询也可以使用Join实现),CASE表达式在控制基于列的逻辑大部分是无法替代的。下面文中会详细讲解CASE表达式。

例如,以下对Products表的查询就在SELECT语句中使用了CASE表达式,以生成用于描述categoryid列取值的信息。

SQL代码如下:

简介

       基于列的逻辑表达式,其实就是CASE表达式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后。由于这里讲的是T-SQL查询,所以只说到CASE表达式在SELECT子句和ORDER BY子句中的使用。

       CASE表达式实现的功能类似于编程语言中的IF…THEN…ELSE逻辑。只是CASE表达式在T-SQL中并不能控制T-SQL程序的流程,只是作为基于列的逻辑使用.

       一个简单的CASE表达式如下:

       我已经知道员工ID对应的姓名,我想获得员工ID,并将员工ID以姓名的方式展现出来,我不知道的员工ID则显示UNKNOW:

SELECT TOP 4 CASE EmployeeID
    WHEN 1 THEN 'CareySon'
    WHEN 2 THEN 'Jack'
    WHEN 3 THEN 'Tom'
    ELSE 'UNKNOW'
    END AS NameList,EmployeeID
  FROM [AdventureWorks].[HumanResources].[Employee]
  ORDER BY EmployeeID

    

       显示结果如下:

       www.129028.com金沙 1

       上面代码中,CASE后面跟选择的列名,后面的WHEN所取得值都为EmployeeID这一列,THEN后面的值为对应前面WHEN后面列中,实际在结果中显示的值。

 

       CASE表达式实际情况可以分为两种:

       CASE简单表达式(CASE Simple Expression):将某个表达式与一组简单表达式进行比较以确定结果。

       CASE 搜索表达式(CASE Searched Expression):计算一组布尔表达式以确定结果。

 

       下面会按照这两种CASE表达式来阐述

 

-- 设置数据库上下文USE TSQLFundamentals2008;GOSELECT productid,productname,categoryid,CASE categoryidWHEN 1 THEN 'Beverages'WHEN 2 THEN 'Condiments'WHEN 3 THEN 'Dairy Products'WHEN 4 THEN 'Confections'WHEN 5 THEN 'Grains/Cereals'WHEN 6 THEN 'Meat/Poultry'WHEN 7 THEN 'Produce'WHEN 8 THEN 'Seafood'ELSE 'Unkown Category'END AS categorynameFROM Production.Products;

CASE简单表达式(CASE Simple Expression)

      在CASE简单表达式中,整个表达式只会取一列的值做相应的判断,上面那个查询例子就是一个CASE简单表达式,可以用下图表示:

 

     www.129028.com金沙 2

www.129028.com金沙,       CASE表达式也可以用这样的写法:

SELECT TOP 4 NameList=CASE EmployeeID
    WHEN 1 THEN 'CareySon'
    WHEN 2 THEN 'Jack'
    WHEN 3 THEN 'Tom'
    ELSE 'UNKNOW'
    END,EmployeeID
  FROM [AdventureWorks].[HumanResources].[Employee]
  ORDER BY EmployeeID

      上面代码和前面代码所达到的效果是一模一样的,从这个代码可以看出,CASE表达式的结果实际上只局限在一列当中,这也是为什么CASE表达式是“基于列的逻辑表达式”

      因为CASE表达式的值只局限在一列当中,所以THEN后面的值数据类型必须相同,或者兼容,否则就会报错。

    

      在上面语句中,还有一个可选的“ELSE”语句,这个语句可以省略,但最好的做法是保留ELSE,否则不在匹配值范围内的所有值都会为“NULL”。

 

本文由www.129028.com金沙发布于数据库,转载请注明出处:T-SQL查询进阶--基于列的逻辑表达式www.129028.com金沙

关键词:

SQL Server 2000的安全配置

SQLserver2000数据库应用非常广泛,一旦出现安全问题,造成的损失往往难以估量!应提前预防,防患于未然。这里,我...

详细>>

如何查看某个查询用了多少TempDB空间www.129028.com金沙

DECLARE @read BIGINT, @write BIGINT; SELECT @read = SUM(num_of_bytes_read), @write = SUM(num_of_bytes_written) FROM tempdb.sys.database_files AS DBFJOI...

详细>>

浅析SQL语句中GROUP BY的用法

GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想 你用了GROUP BY 按 ITEM.ITEMNUM这个字段分组,那其他字...

详细>>

微软总是试图使它的软件安装尽可能地简单顺www.129028.com金沙

如果你没有特意记录安装日期,那么有没有办法从SQL Server里查询到呢?想想我们在安装的时候,肯定会有Windows认证登...

详细>>