我有2个数据库,一个在Mysql中,另一个在SQL Server中。在这两个数据库中,我有一个表tb_Episode
,两个数据库都有相同的记录。
当我在Mysql中运行此查询时,它返回5.1582
的结果,而在SQL Server中,它返回5
。
为什么我会得到不同的结果?我使用此查询 - 任何人都可以帮助我,我该如何解决此错误?
SELECT
AVG(CASE
WHEN (SN_Ep = '1' AND MonthEnd = '2017-04')
THEN SN_Visits
ELSE NULL
END) AS SNVisitsSNEps_2017_04
FROM
tb_Episode
WHERE
CustID = '27'
AND PayerType = 'Ep'
AND BranchID IN (238, 239, 240, 241)
答案 0 :(得分:2)
在SQL Server中,AVG()
的返回数据类型由输入数据类型决定。
如果对一列整数求平均值,则结果为整数。如果希望结果是不同的数据类型,请将输入转换为该数据类型。
作为一个例子......
AVG(
CAST(
CASE when (SN_Ep = '1' and MonthEnd='2017-04') then SN_Visits ELSE NULL END)
AS
DECIMAL(18,10)
)
)
答案 1 :(得分:1)
请尝试这样 -
AVG(
CASE when (SN_Ep = '1' and MonthEnd='2017-04') then SN_Visits * 1. ELSE NULL END)
)
答案 2 :(得分:1)
两个数据库的一些指导:
else NULL
是多余的。然后,您希望将整数类型转换为SQL Server的数字。一种简单的方法是乘以1.0
。
我建议两者:
SELECT AVG(CASE when SN_Ep = 1 and MonthEnd = '2017-04' THEN SN_Visits * 1.0 END) as SNVisitsSNEps_2017_04
FROM tb_Episode
WHERE CustID = 27 AND
PayerType = 'Ep' AND
BranchID IN (238, 239, 240, 241) ;