【发布时间】: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 中的DEBET 和CREDIT 都是十进制类型; 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)akaSUM(DEBET(decimal,null))返回 INT。这对我来说没有意义
标签: sql tsql select decimal converter