【问题标题】:T-SQL sum on decimal results in integerT-SQL 十进制求和结果为整数
【发布时间】:2016-01-25 14:32:16
【问题描述】:

好的,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

OTHERTABLE 中的DEBETCREDIT 都是十进制类型; DEBET(decimal,null) 根据提示信息。

结果是……

DEBET      CREDIT  DEBETSALDO
6817.07    0.00    0

如果 DEBET 和 CREDIT 被解释为小数,为什么 SQL 会在这个 select 语句中将我的整个 shebang 转换回整数? 或许再添加几个转换器?

编辑

我只是变了

选择债务、信用

进入

选择总和(债务),总和(信用)

强调问题出在哪里。结果保持不变。

【问题讨论】:

  • 附言。我知道我被智障的可能性更大:)
  • 我认为这不是您的原始查询,因为您缺少 group by。但是,如果我尝试类似的事情,我看不到相同的行为。您使用的是哪个版本的 SQL?
  • 您实际上并不需要所有convert-s。如果SUM 中的表达式是decimal,那么返回类型也应该是decimal
  • @SeanCoetzee 不,这不是原始 SQL,但表中基本上有一个 varchar 字段的 group by,没有选择其他字段。 DEBET 和 CREDIT 都是小数数据类型。这里真的没有太多其他事情发生。
  • @ArturUdod 我知道,但 SUM 的工具提示告诉我 SUM(ALG.DEBET) aka SUM(DEBET(decimal,null)) 返回 INT。这对我来说没有意义

标签: sql tsql select decimal converter


【解决方案1】:

找到了。

显然,当您将 decimal(11,2) 转换为 decimal(9,2) 时会导致精度损失。

抱歉,我应该仔细检查一下。 但是,6817.07 应该适合小数(9,2),对吧?

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 2010-10-16
    • 2016-11-01
    • 2011-12-30
    • 2012-02-21
    • 2014-04-16
    相关资源
    最近更新 更多