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ステートメントを使用して正しい.05または.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はNULLではなく0.06に丸められます。

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 に答える