在Sqlserver中的CASE我很少用到, 但是我认为他比较强大,用的好的可以简化很多操作! 他相当于C#里面的 Switch , 一些逻辑判断可以提到SQL中去处理,而不再C#里面来处理.
方式1. 固定比较值
SELECT TOP 10 OrderID , OrderID % 10 AS 'Last Digit' , POSITION = CASE OrderID % 10 WHEN 1 THEN 'First' WHEN 2 THEN 'Second' WHEN 3 THEN 'Third' WHEN 4 THEN 'Fourth' ELSE 'Something else' END FROM dbo.Orders
相当于:
switch (OrderID % 10) { case 1: POSITION = "First"; break; //code 2.3.4 ... default: POSITION = "Something else"; break; }
方式2. 比较值通过计算,使用表里面的其他字段
SELECT TOP 10 OrderID % 10 AS 'Last Digit' , ProductID , "How Close?" = CASE orderId % 10 WHEN ProductID THEN 'Exact Match!' WHEN ProductID - 1 THEN 'Within -1' WHEN ProductID + 1 THEN 'Within +1' ELSE CAST(Quantity AS NVARCHAR(MAX)) --使用其他列Quantity END FROM dbo.[Order Details] WHERE ProductID < 10 ORDER BY OrderID DESC
方式3. 注意CASE 后面没有了表达式 , 注意和上面比较
/* case 后面么有了表达式 When 后面必须为bool 类型 好?处?:每?个?when的?比?较?条?件?都?可?以?完?全?由?你?来?控?制? 2中?case 后?面?的?表?达?式?固?定? */ SELECT TOP 10 OrderID % 10 AS 'Last Digit' , ProductID , "How Close?" = CASE WHEN ProductID % 2 = 0 THEN N'偶?数?' WHEN ABS(OrderID % 10 - ProductID) <= 1 THEN 'Within +1' ELSE CAST(Quantity AS NVARCHAR(MAX)) --使?用?其?他?列?Quantity END FROM dbo.[Order Details] WHERE ProductID < 10 ORDER BY OrderID DESC
场景:商场里面打折(涨价)后价格一般喜欢为49,75,95这样的数字结尾! 下面几个示例
涨价后的价格 | 实际标价 |
$10.13 | $10.49 |
$17.57 | $17.75 |
$79.99 | $79.95 |
1. 0.49以下的为0.49
2.0.49~0.75 为0.75
3.0.75以上的为0.95
思路:
嵌套if…else可以实现上面需求, 但是当规则更复杂的时候,代码将很难读懂,必须使用游标(游标我不熟悉)来实现代码并且每次都要检验每一行代码。
使用CASE语句试一试
USE Northwind GO DECLARE @Markup MONEY ; DECLARE @Muliplier MONEY ; SET @Markup = 0.10 ; --涨价% , 如果涨价为%,20% 只需要在这里修改即可 SET @Muliplier = @Markup + 1 ; --涨价后的百分比 SELECT TOP 10 ProductName , UnitPrice , UnitPrice * @Muliplier AS '价格' , "新价格" = CASE WHEN FLOOR(UnitPrice * @Muliplier + 0.24) > FLOOR(UnitPrice * @Muliplier) THEN FLOOR(UnitPrice * @Muliplier) + 0.95 WHEN FLOOR(UnitPrice * @Muliplier + 0.5) > FLOOR(UnitPrice * @Muliplier) THEN FLOOR(UnitPrice * @Muliplier) + 0.75 ELSE FLOOR(UnitPrice * @Muliplier) + 0.49 END FROM dbo.Products ORDER BY ProductID DESC
以下为结果:
以上知识参考: 《SQL Server2005编程入门经典(第二版)》
记录学习点滴...,坚持每天让自己的技能增加1%,默默的坚持下去吧!:-)