0

我是一名新秀 SQL 程序员,但在这里和许多其他 SQL 论坛中搜索过,但无法弄清楚为什么我的简单除法脚本仍然忽略小数。我已经将所有内容都转换为十进制,但在输出中仍然没有得到任何内容。.

(CAST((ABS(CAST(CAST(SUM(h4qqnb) AS DECIMAL(12,4)) - CAST(SUM(h4hdnb) AS DECIMAL(12,4))AS DECIMAL(12,4)))/CAST(SUM(h4hdnb) AS DECIMAL(12,4))) AS DECIMAL(10,2))*100)||'%' AS Count_Variance_Rate,

我错过了什么?

谢谢!

4

1 回答 1

0

这是一个非常丑陋的表达,有太多的 CAST,但基本上你在做什么(只看最外面的 CAST 语句)是在说

CAST(someNumber as DECIMAL(10,2)

这将为您提供一个精确到小数点后两位的数字。然后你将它乘以 100,得到一个整数。

如果您尝试获取格式化为两位小数的百分比值,您可以这样做,假设 h4qqnb 和 h4hdnb 是十进制字段开头:

concat(cast(cast(abs(sum(h4qqnb) - sum(h4hdnb)) / sum(h4hdnb) as decimal(10, 4)) * 100 as decimal(10, 2)), '%') as Count_Variance_Rate2

http://sqlfiddle.com/#!2/279752/5/0上的工作示例

于 2013-11-01T17:48:11.607 回答