AVG函数在SQL Server中无法正常工作
我有两个数据库,一个在Mysql中,另一个在SQL Server中。在这两个数据库中,我有一个表AVG函数在SQL Server中无法正常工作,sql,sql-server,Sql,Sql Server,我有两个数据库,一个在Mysql中,另一个在SQL Server中。在这两个数据库中,我有一个表tb\u-eposion,两个数据库都有相同的记录 当我在Mysql中运行这个查询时,它返回的结果是5.1582,而在SQL Server中,它返回的结果是5 为什么我会得到不同的结果?我使用此查询-任何人都可以帮助我,我如何解决此错误 SELECT AVG(CASE WHEN (SN_Ep = '1' AND MonthEnd = '2017-04')
tb\u-eposion
,两个数据库都有相同的记录
当我在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)
在SQL Server中,
AVG()
的返回数据类型由输入数据类型决定
AVG(
CAST(
CASE when (SN_Ep = '1' and MonthEnd='2017-04') then SN_Visits ELSE NULL END)
AS
DECIMAL(18,10)
)
)
在SQL Server中,
AVG()
的返回数据类型由输入数据类型决定
AVG(
CAST(
CASE when (SN_Ep = '1' and MonthEnd='2017-04') then SN_Visits ELSE NULL END)
AS
DECIMAL(18,10)
)
)
请像这样试试-
AVG(
CASE when (SN_Ep = '1' and MonthEnd='2017-04') then SN_Visits * 1. ELSE NULL END)
)
请像这样试试-
AVG(
CASE when (SN_Ep = '1' and MonthEnd='2017-04') then SN_Visits * 1. ELSE NULL END)
)
两个数据库的一些指南:
是多余的否则NULL
- 如果值是一个数字,不要将其与字符串进行比较
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) ;
两个数据库的一些指南:
是多余的否则NULL
- 如果值是一个数字,不要将其与字符串进行比较
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) ;
我冒昧地猜测,
SN\u以整数访问
?SQL Server中的聚合函数返回的数字与提供的数字具有相同的精度。如果这是一个整数,你的平均值也将是一个整数。尝试将SN\u访问次数
更改为CONVERT(十进制(10,4),SN\u访问次数)
。或者执行AVG(1.0*…)
。由于它现在的所有工作,我会冒险猜测SN\u访问次数
?SQL Server中的聚合函数返回的数字与提供的数字具有相同的精度。如果这是一个整数,你的平均值也将是一个整数。尝试将SN\u访问次数
更改为CONVERT(十进制(10,4),SN\u访问次数)
。或者执行AVG(1.0*…)
。感谢它现在的所有工作