Select语句中的案例

fad*_*zal 137 sql sql-server case

我有一个SQL语句,有一个CASESELECT,我只是无法正确.你们能告诉我一个例子CASE,说明案件的条件是什么,结果来自案件.例如:

     Select xxx, yyy
     case : desc case when bbb then 'blackberry';
     when sss then 'samsung';
     end 
     from (select ???? .....
Run Code Online (Sandbox Code Playgroud)

结果显示

 name                         age       handphone
xxx1                         yyy1      blackberry
xxx2                         yyy2      blackberry
Run Code Online (Sandbox Code Playgroud)

NuN*_*DdY 187

对于语法和用法这些类型的问题,MSDN是一个很好的参考.这来自Transact SQL Reference - CASE页面.

http://msdn.microsoft.com/en-us/library/ms181765.aspx

USE AdventureWorks2012;
GO
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'
  END
FROM Production.Product
ORDER BY ProductNumber ;
GO
Run Code Online (Sandbox Code Playgroud)

如果您正在使用SQL Server,您可能想要查看的另一个好网站是SQL Server Central.这有很多种资源可用于您想要学习的SQL Server的任何区域.


Sab*_*teh 79

我认为这些对你有帮助.

使用SELECT带有简单CASE表达式的语句

在一个SELECT语句中,一个简单的CASE表达式只允许进行相等性检查; 没有进行其他比较.以下示例使用CASE表达式更改产品系列类别的显示,以使其更易于理解.

USE AdventureWorks2012;
GO
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,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO
Run Code Online (Sandbox Code Playgroud)

使用SELECT带有搜索CASE表达式的语句

SELECT语句中,搜索CASE表达式允许基于比较值在结果集中替换值.以下示例根据产品的价格范围将列表价格显示为文本注释.

USE AdventureWorks2012;
GO
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'
      END
FROM Production.Product
ORDER BY ProductNumber ;
GO
Run Code Online (Sandbox Code Playgroud)

使用CASE一个在ORDER BY条款

以下示例使用子句中的CASE表达式ORDER BY来确定基于给定列值的行的排序顺序.在第一个示例中,将评估HumanResources.Employee表的SalariedFlag列中的值.将SalariedFlag设置为1的员工按BusinessEntityID按降序顺序返回.将SalariedFlag设置为0的员工按BusinessEntityID按升序顺序返回.在第二个示例中,当CountryRegionName列等于"United States"时,结果集按行TerritoryName排序,而对于所有其他行,则按CountryRegionName排序.

SELECT BusinessEntityID, SalariedFlag
FROM HumanResources.Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
        ,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
GO


SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
         ELSE CountryRegionName END;
Run Code Online (Sandbox Code Playgroud)

CASEUPDATE声明

以下示例使用语句中的CASE表达式UPDATE来确定为SalariedFlag设置为0的员工设置的VacationHours列的值.当从VacationHours减去10小时时,结果为负值,VacationHours增加40小时; 否则,VacationHours增加20小时.该OUTPUT子句用于显示假期前后值.

USE AdventureWorks2012;
GO
UPDATE HumanResources.Employee
SET VacationHours = 
    ( CASE
         WHEN ((VacationHours - 10.00) < 0) THEN VacationHours + 40
         ELSE (VacationHours + 20.00)
       END
    )
OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue, 
       Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0; 
Run Code Online (Sandbox Code Playgroud)

使用CASE一个在HAVING条款

以下示例使用子句中的CASE表达式HAVING来限制SELECT语句返回的行.该语句返回HumanResources.Employee表中每个作业标题的最大小时费率.该HAVING条款将所有权限制为最高工资标准大于40美元的男性或最高工资标准大于42美元的女性.

USE AdventureWorks2012;
GO
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
FROM HumanResources.Employee AS e
JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
GROUP BY JobTitle
HAVING (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;
Run Code Online (Sandbox Code Playgroud)

有关这些示例的更多详细信息,请访问源代码.

还可以访问这里这里,了解一些非常详细的例子.


小智 12

你也可以用:

SELECT CASE
         WHEN upper(t.name) like 'P%' THEN
          'productive'
         WHEN upper(t.name) like 'T%' THEN
          'test'
         WHEN upper(t.name) like 'D%' THEN
          'development'
         ELSE
          'unknown'
       END as type
FROM table t
Run Code Online (Sandbox Code Playgroud)