AVG函数在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')

我有两个数据库,一个在Mysql中,另一个在SQL Server中。在这两个数据库中,我有一个表
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
    是多余的
  • 如果值是一个数字,不要将其与字符串进行比较
然后,您希望将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) ;

两个数据库的一些指南:

  • 否则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) ;

我冒昧地猜测,
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*…)
。感谢它现在的所有工作