sql-server - SQL : left join and sum: Arithmetic overflow error converting expression to data type int

标签 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-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

我能做什么?

最佳答案

试试这个

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

关于sql-server - SQL : left join and sum: Arithmetic overflow error converting expression to data type int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30698259/

相关文章:

sql - 将字符串转换为日期和时间

sql-server - T-SQL 根据输入参数的值使用不同的 WHERE 子句

Mysql查询问题,列不为空时插入行的情况

sql - postgresql - 使用聚合和最大值

sql - 如何外部连接两个表(主表和多对一子表)以仅从第二个表中获取一个项目?

c# - 加密 SqlDependency 创建的存储过程

sql - 数组联合作为聚合函数

c# - LINQ 按时间段聚合和分组

sql-server - 如何在 Sql Server 2008 R2 存储过程中搜索字符串?

mysql - 在mysql中使用外连接来连接子表