Select 语句中的大小写

我有一个 SQL 语句,它有一个来自 SELECTCASE,但我就是不能正确使用它。你们能不能给我看一个 CASE的例子,其中的情况是条件,结果是来自情况。例如:

     Select xxx, yyy
case : desc case when bbb then 'blackberry';
when sss then 'samsung';
end
from (select ???? .....

结果如何

 name                         age       handphone
xxx1                         yyy1      blackberry
xxx2                         yyy2      blackberry
898632 次浏览

对于有关语法和用法的这类问题,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

如果您正在使用 SQLServer,您可能想要检查的另一个好站点是 SQLServer 中心。对于您希望学习的 SQLServer 的任何领域,都可以使用各种各样的资源。

你亦可使用:

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

我觉得这些能帮到你。

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

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

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

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

ORDER BY子句中使用 CASE

下面的示例使用 ORDER BY子句中的 CASE表达式根据给定的列值确定行的排序顺序。在第一个示例中,HumanResources 的 SalariedFlag 列中的值。计算 Employee 表。SalariedFlag 设置为1的雇员由 BusinessEntityID 按降序返回。SalariedFlag 设置为0的雇员由 BusinessEntityID 按升序返回。在第二个示例中,当列 CountryRegionName 等于“ United States”时,结果集按照领土名排序,对于所有其他行,则按照 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;

UPDATE语句中使用 CASE

下面的示例使用 UPDATE语句中的 CASE表达式来确定为 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;

HAVING子句中使用 CASE

下面的示例使用 HAVING子句中的 CASE表达式来限制由 SELECT语句返回的行。该语句返回 HumanResources 中每个职位的最大时薪。员工表。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;

有关这些示例的详细说明,请访问 来源

也请访问 给你给你的一些例子与伟大的细节。