2012-09-04 57 views
1

我有一個表,PriceTable,TSQL - ROUND價格爲.05和.09。更新正在生成NULL?

列UPC(INT),價格(錢)

我想圓所有美分的價格列,在任一.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; 

有沒有更好的方式來做到這一點?我不能換我的頭周圍爲什麼我會得到一個空的價格時,所有分情形應占即使他們間沒有」噸,我仍然應該得到價格與圓的價格(價格,1,2)我不應該需要一個ELSE,因爲不應該有任何其他條件

謝謝,

馬歇爾

+2

必須有價格像1.255或1.295通過裂縫下跌。 –

+0

@YuxiuLi - 就是這樣。謝謝。 – FreeMars

回答

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; 
+0

完美運作。介於.05和.06之間的值是問題之一。感謝您的幫助和快速響應。 – FreeMars