2015-06-25 145 views
1

我想在SQL中計算一些性能指標爲[RATE]但無論我做什麼我只獲取整數值作爲回報。計算被四捨五入SQL Server 2012

在我的數據集中,我有一個Numerator和一個分母,它們都被存儲爲整數,並被分解爲組和子集。費率根據組和子集計算略有不同。對於組1,計算僅僅是N/D。對於組2,除了計算出的1個子集(N * 10000)/ D之外,計算是(N * 1000)/ D。

我寫的查詢爲:

SELECT [Group] 
     ,[SubSet] 
     ,[Numerator] N 
     ,[Denominator] D 
     ,CASE WHEN D=0 Then NULL 
     WHEN [Group]='G1' THEN [N]/[D] 
     WHEN [SubSet]='S2' THEN ([N]*10000)/[D] 
     WHEN [SubSet] NOT LIKE 'S2%' AND [G] NOT LIKE 'G1%' THEN ([N]*1000)/[D] as [RATE] 

不管我做什麼,結果變量均爲整數。我試過格式RATE,因爲varchar,decimalfloat沒有成功。我嘗試將N和D格式更改爲varchar,decimalfloat。我試着將公式從(N*1000)/D改爲(N/D)*1000,但仍然沒有效果。

我在想什麼/做錯了什麼?

回答

2

你遇到的問題是因爲SQL正在做整數除法,它只會返回整數。要得到小數返回值,您必須至少有一個值作爲小數。

試試這個:

(CAST([N] as decimal(12,6))/[D]) * 1000 

根據您所期待的精度調整decimal(12,6)12,6將在小數點後返回一個包含6位數的小數。如果您只需要2位小數,請使用16,2

如果您希望將計算的值四捨五入,則需要使用SQL中的ROUND函數。

回合到小數點後第二位:

ROUND((CAST([N] as decimal(12,6))/[D]) * 1000, 2) 
1

您需要使用CAST:

CAST ((N*1000) AS FLOAT)/D 

希望這有助於。

0

SELECT (n * 1000.0)將做到這一點。