十进制列的SQL Sum函数返回int而不是decimal

时间:2014-12-26 12:54:57

标签: sql sql-server tsql

我有一个十进制类型的列,我需要像这样使用sum函数:

   declare @credit decimal = (select
                               (    select ISNULL(SUM(Convert(DECIMAL(13,2), Amount)),0)
                                    from TransactionDetail as t1
                                    where t1.AccountFrom = @fromAccount and t1.AccountTo = @toAccount
                               ) -     
                               (    select ISNULL(SUM(Convert(DECIMAL(13,2),Amount)),0)
                                    from TransactionDetail as t1
                                    where t1.AccountFrom = @toAccount  and t1.AccountTo = @fromAccount
                               ) 
                           )
select @credit

输出应为十进制数字,如: 13.56

然而,结果总是int,有什么建议吗?

1 个答案:

答案 0 :(得分:5)

默认scale为0.如果您希望将结果作为特定格式,请尝试向变量显式添加精度和比例:

declare @credit decimal(13, 2) = (select . . .

此行为很正常documented

  

将存储在右侧的小数位数   小数点。从p中减去该数字以确定   小数点左边的最大位数。最大值   可以存储在右侧的小数位数   小数点。比例必须是从0到p的值。 cSale可以   仅在指定精度时指定。 默认比例为0;