T-SQL 小数求和为整数
T-SQL sum on decimal results in integer
好吧,T-SQL 没有像我预期的那样行事。
看看这个:
SELECT SUM(DEBET),SUM(CREDIT)
CONVERT(DECIMAL(9,2),
CASE WHEN SUM(DEBET) - SUM(CREDIT) > 0.00
THEN CONVERT(DECIMAL(9,2),SUM(CONVERT(DECIMAL(9,2),DEBET))) - CONVERT(DECIMAL(9,2),SUM(CONVERT(DECIMAL(9,2),CREDIT)))
ELSE CONVERT(DECIMAL(9,2),0.00)
END
) AS DEBETSALDO
FROM OTHERTABLE
DEBET
和OTHERTABLE
中的CREDIT
都是小数类型; DEBET(decimal,null)
根据工具提示。
结果是……
DEBET CREDIT DEBETSALDO
6817.07 0.00 0
为什么以及在哪里,如果 DEBET 和 CREDIT 被解释为小数,SQL 是否会在此 select 语句中将我的整个 shebang 转换回整数?
也许再添加几个转换器?
编辑
我刚换了
SELECT DEBET, CREDIT
进入
SELECT SUM(DEBET), SUM(CREDIT)
强调问题出在哪里。结果保持不变。
找到了。
显然,将 decimal(11,2)
转换为 decimal(9,2)
会导致精度损失。
抱歉,我应该仔细检查一下。
但是,6817.07
应该放在 decimal(9,2) 内,对吧?
感谢您的帮助。
好吧,T-SQL 没有像我预期的那样行事。 看看这个:
SELECT SUM(DEBET),SUM(CREDIT)
CONVERT(DECIMAL(9,2),
CASE WHEN SUM(DEBET) - SUM(CREDIT) > 0.00
THEN CONVERT(DECIMAL(9,2),SUM(CONVERT(DECIMAL(9,2),DEBET))) - CONVERT(DECIMAL(9,2),SUM(CONVERT(DECIMAL(9,2),CREDIT)))
ELSE CONVERT(DECIMAL(9,2),0.00)
END
) AS DEBETSALDO
FROM OTHERTABLE
DEBET
和OTHERTABLE
中的CREDIT
都是小数类型; DEBET(decimal,null)
根据工具提示。
结果是……
DEBET CREDIT DEBETSALDO
6817.07 0.00 0
为什么以及在哪里,如果 DEBET 和 CREDIT 被解释为小数,SQL 是否会在此 select 语句中将我的整个 shebang 转换回整数? 也许再添加几个转换器?
编辑
我刚换了
SELECT DEBET, CREDIT
进入
SELECT SUM(DEBET), SUM(CREDIT)
强调问题出在哪里。结果保持不变。
找到了。
显然,将 decimal(11,2)
转换为 decimal(9,2)
会导致精度损失。
抱歉,我应该仔细检查一下。
但是,6817.07
应该放在 decimal(9,2) 内,对吧?
感谢您的帮助。