Sql server SQL:左联接和求和:算术溢出将表达式转换为数据类型int时出错

Sql server SQL:左联接和求和:算术溢出将表达式转换为数据类型int时出错,sql-server,aggregate-functions,outer-join,Sql Server,Aggregate Functions,Outer Join,我有一个疑问: select p.UserName, sum(b.PercentRials) as amount, sum(r.Amount) as Pays from bills b inner join UserProfiles p on b.PayerUserName=p.UserName left outer join PayReceipts r on p.UserName=r.UserName where p.[Percent]>0 and b.PayDate>'2014-

我有一个疑问:

select p.UserName, sum(b.PercentRials) as amount, sum(r.Amount) as Pays
from bills b inner join UserProfiles p on b.PayerUserName=p.UserName
left outer join PayReceipts r on p.UserName=r.UserName
where p.[Percent]>0 and b.PayDate>'2014-11-20'
group by p.UserName
我在运行时遇到此错误:

Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.
Warning: Null value is eliminated by an aggregate or other SET operation.
我可以理解外部联接导致此错误,因为当我删除最后一个和时,它运行正常。但我记得我做过这样的查询,并在外部联接表上得到求和的
NULL


我能做什么?

如果你在金融公司工作

sum(r.Amount) as Pays
很可能超过20亿这个微不足道的整数极限。您可以强制转换为更大的变量类型:

试试这个

select p.UserName, sum(b.PercentRials) as amount, sum(CAST (r.Amount AS BIGINT)) as Pays
from bills b inner join UserProfiles p on b.PayerUserName=p.UserName
left outer join PayReceipts r on p.UserName=r.UserName
where p.[Percent]>0 and b.PayDate>'2014-11-20'
group by p.UserName

SUM
中的表达式类型决定了输出的类型。因此,当总和超过整数限制时,您将收到此错误。要将数据视为整数而不产生错误,您需要将
amount
列转换为
BIGINT
,因此总和的类型为
BIGINT

这个警告误导了我。我认为外部连接是原因,我希望
pays
列的值要小得多。谢谢
select p.UserName, sum(b.PercentRials) as amount, sum(CAST (r.Amount AS BIGINT)) as Pays
from bills b inner join UserProfiles p on b.PayerUserName=p.UserName
left outer join PayReceipts r on p.UserName=r.UserName
where p.[Percent]>0 and b.PayDate>'2014-11-20'
group by p.UserName