我在下面的查询中遇到了问题。问题是:
Msg 8115,Level 16,State 2,Line 1 将表达式转换为数据类型int的算术溢出错误
问题位于以下代码的这一行。
INNER JOIN Test t ON a.AccountNO <> t.AccountNo
有什么想法吗?
WITH TEST AS
(
SELECT DISTINCT AccountNo, SUBSTRING(APartyNO, 3, LEN(APartyNo)) AS APartyNoCut
FROM (SELECT DISTINCT AccountNo, APartyNo
FROM prf_BatchItems
WHERE BatchID = 127
AND Code1 = 'DEDF'
AND APartyNo NOT LIKE '04%'
AND ( Left(APartyNo,2) = '02'
OR Left(APartyNo,2) = '03'
OR Left(APartyNo,2) = '07'
OR Left(APartyNo,2) = '08')
GROUP BY AccountNo, APartyNo
UNION
SELECT DISTINCT AccountNo, APartyNo
FROM prf_BatchItemAdditionalAPartyNos
WHERE BatchID = 127
GROUP BY AccountNo, APartyNo) a
)
SELECT Code2, TypeName, CallTypeName, --SUM([Count]),
SUM(Duration), SUM(CostGrossExGST)
FROM
(
SELECT 'WITHOUT STD' AS Type,
Code2, b.TypeName, CallTypeName,
--SUM([COunt]) AS Count,
SUM(DurationSecond) AS Duration,
SUM(a.CostGrossExGSt) AS CostGrossExGST
FROM prf_BatchItems a
INNER JOIN (SELECT * FROM dbo.prf_BillTypeCodes WHERE BillTypeID = 2) b ON a.Code2 = b.BillCodeName
INNER JOIN Test t ON a.AccountNO <> t.AccountNo
where BatchID = 127
AND Code1 = 'DC'
AND ServiceTypeName = 'MobileNet'
AND CallTypeName = 'National Direct Dialled calls'
AND (LEFT(BPartyNo,2) <> '02' AND LEFT(BPartyNo,2) <> '03' OR LEFT(BPartyNo,2) <> '07' OR LEFT(BPartyNo,2) <> '08')
AND BPartyNo NOT LIKE '04%'
AND BPartyNo NOT LIKE '1%'
GROUP BY --a.AccountNo,
Code2, b.TypeName, CallTypeName) zz
GROUP BY Code2, TypeName, CallTypeName
答案 0 :(得分:3)
看起来像这一行INNER JOIN Test t ON a.AccountNO <> t.AccountNo
中的一个AccountNO不是一个整数,并且有一个无法转换为整数的值
两个表中列的数据类型是什么
答案 1 :(得分:0)
有时,sql查询中的值的值大于整数可以容纳的值,因此将数据类型从int(整数)更改为Bigint,问题就解决了。