1

我有一张桌子,PriceTable,

列 UPC (int), Price (money)

我正在尝试将价格列中的所有美分四舍五入,以 .x5 或 .x9 结尾。

如果价格的最后一位是 0-5,那么最后一位应该是 5。
如果价格的最后一位是 6-9,那么最后一位应该是 9。
示例

  • 1.00 变为 1.05
  • 1.21 到 1.25
  • 1.26 到 1.29

我正在使用以下内容,但在更新之后,我得到了一些价格被更新为 NULL 的记录,我不知道为什么。它对 95% 的数据都正常工作,但我看不出与数据不同的地方。

我的想法是 (Round(Price,1,2) 给了我价格中的美元。从整体价格中减去它以获得美分,然后使用 CASE 语句将正确的 0.05 或 0.09 添加回价格。

UPDATE PriceTable
SET Price = ROUND(Price,1,2) + 
CASE 
WHEN Price -(ROUND(Price,1,2)) BETWEEN .00 AND .05 THEN .05
WHEN Price -(ROUND(Price,1,2)) BETWEEN .06 AND .09 THEN .09
END;

有一个更好的方法吗?我无法理解为什么当所有美分场景都应该考虑在内时我会得到一个 NULL 的价格,即使没有,我仍然应该用 ROUND(Price,1,2) 获得价格的美元金额)。我不应该需要 ELSE,因为不应该有任何其他条件。

谢谢,

马歇尔

4

1 回答 1

4

对于以 0.05 < ThatValue < 0.06 的值结尾的所有价格,您将获得 NULL 值。将其更改为 else,0.050018 将四舍五入为 0.06,而不是 NULL。

UPDATE PriceTable
SET Price = ROUND(Price,1,2) + 
CASE 
WHEN Price -(ROUND(Price,1,2)) BETWEEN .00 AND .05 THEN .05
ELSE .09
END;
于 2012-09-04T20:18:07.870 回答