SQL语句中的CASE

来源:互联网 发布:mac双系统能玩守望先锋 编辑:程序博客网 时间:2024/05/16 01:09

为什么要使用CASE?

当我们的代码中需要根据从数据库中取出的某个变量的值来进行逻辑判断的话 我们可以执行先执行一边SQL 得到需要的变量的值 并且用高级编程语言进行逻辑分支判断

但是更简单的方法就是直接在SQL查询中使用CASE 它就相当于SQL中的CASE SWITCH 或者 IF THEN ELSE 


基本语法:

CASE WHEN CONDITION1 THEN ACTION1ELSE ACTION2 END

CASE 后面如果跟一个变量的话 这时它就相当于CASE SWITCH 

1.CASE可以用在SELECT语句中 不包含逻辑判断 只有给出一个值  用在等号 = 后面

这段代码的意思在于根据Productline值的不同 赋给Category不同的值 此时CASE的用法相当于Switch

SELECT   ProductNumber, Category =      CASE ProductLine         WHEN 'R' THEN 'Road'         WHEN 'M' THEN 'Mountain'         WHEN 'T' THEN 'Touring'         WHEN 'S' THEN 'Other sale items'         ELSE 'Not for sale'      END,   NameFROM Production.ProductORDER BY ProductNumber;

2.CASE用在SELECT中更复杂的一种情况 包含逻辑判断 

CASE后面不再跟变量 而是WHEN后面跟一个逻辑表达式

SELECT   ProductNumber, Name, 'Price Range' =       CASE          WHEN ListPrice =  0 THEN 'Mfg item - not for resale'         WHEN ListPrice < 50 THEN 'Under $50'         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'         ELSE 'Over $1000'      ENDFROM Production.ProductORDER BY ProductNumber ;

3.在ORDER BY 语句中使用CASE

SELECT BusinessEntityID, SalariedFlagFROM HumanResources.EmployeeORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC        ,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;

SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionNameFROM Sales.vSalesPersonWHERE TerritoryName IS NOT NULLORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName         ELSE CountryRegionName END;

4.在HAVING语句中使用CASE

SELECT JobTitle, MAX(ph1.Rate)AS MaximumRateFROM HumanResources.Employee AS eJOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityIDGROUP BY JobTitleHAVING (MAX(CASE WHEN Gender = 'M'         THEN ph1.Rate         ELSE NULL END) > 40.00     OR MAX(CASE WHEN Gender  = 'F'         THEN ph1.Rate          ELSE NULL END) > 42.00)ORDER BY MaximumRate DESC;



原创粉丝点击