我正在尝试将一些性能指标计算为SQL中的[RATE]
,但无论我做什么,我只会得到整数值作为回报。
在我的数据集中,我有一个Numerator和一个Denominator,它们都存储为整数,分为组和子集。根据组和子集计算的速率略有不同。对于组1,计算仅为N / D.对于第2组,计算为(N * 1000)/ D,但计算的子集除外(N * 10000)/ 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
,decimal
和float
但没有成功。我尝试将N和D的格式更改为varchar
,decimal
和float
。我尝试将公式从(N*1000)/D
更改为(N/D)*1000
,但仍无效果。
我错过了什么/做错了什么?
答案 0 :(得分: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 :(得分:1)
您需要使用CAST:
CAST ((N*1000) AS FLOAT) / D
希望这有帮助。
答案 2 :(得分:0)
SELECT (n * 1000.0)
会这样做。