2015-06-25 105 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)将做到这一点。