AVG功能在SQL Server中无法正常运行

时间:2018-02-14 10:36:25

标签: sql sql-server

我有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) 

3 个答案:

答案 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) ;