sql语句:CASE WHEN精妙语句
说种情况如商品价格,把不同区域的价格的小数改变成.49, .75, .99以便促销活动。
下面SQL语句代码描述。价格提10%后把小数位改成49, .75, .99

  1. SELECT @Markup = .10
  2. SELECT @Multiplier = @Markup +1
  3. SELECT TOP 10 ProductID, ProductName, UnitPrice, UnitPrice * @Multiplier AS "Marked Up Price", "New Price" =
  4. CASE
  5.    WHEN FLOOR(UnitPrice * @Multiplier + .24) > FLOOR(UnitPrice * @Multiplier) THEN FLOOR(UnitPrice * @Multiplier) + .95
  6.    WHEN FLOOR(UnitPrice * @Multiplier + .5) > FLOOR(UnitPrice * @Multiplier) THEN FLOOR(UnitPrice * @Multiplier) + .75
  7.    ELSE FLOOR(UnitPrice * @Multiplier) + .49
  8. END
  9. FROM Products
  10. ORDER BY ProductID DESC

此代码语句中用到了CASE WHEN条件语句与FLOOR函数,先解释下
FLOOR把数值取整:

  1. PRINT FLOOR(12.1)
  2. --返回12
  3. PRINT FLOOR(12.9)
  4. --返回12

CASE WHEN条件语句稍有些编程基础的人应该都有看懂重点不解释这个语句怎么用的。说下上面代码。个人认为还是比较精妙的

  1. SELECT @Markup = .10
  2. SELECT @Multiplier = @Markup +1
  3. UnitPrice * @Multiplier

把价格提升10%。

  1. FLOOR(UnitPrice * @Multiplier + .24) > FLOOR(UnitPrice * @Multiplier)  THEN FLOOR(UnitPrice * @Multiplier) + .95
  2. --FLOOR(18.00 * 1.1 + .24) > FLOOR(1.8 * 1.1)
  3. --FLOOR(19.8 + .24) > FLOOR(19.8)
  4. --21 > 19.8
  5. --成立后返回FLOOR(19.8) + .95,这也是为什么+.24而不是其它数值。综合上面CASE WHEN语句就能更好的理解

, ,