计算SQL Server中一行的平均值

计算SQL Server中一行的平均值,sql,sql-server,sql-server-2008,sql-server-2014,Sql,Sql Server,Sql Server 2008,Sql Server 2014,我有下表..百分比列是nvarchar类型 Data Percent1 Percent2 Percent3 1 3% 4% 6% 2 6% 8% 7% 3 8% 6% 8% 我必须计算每行的平均值,所以我得到的结果如下 平均数据 我试图将%列转换为十进制,以便应用平均值函数 select Case WHEN Isnumeric([Percent1]) = 1 THEN CONVERT(

我有下表..百分比列是nvarchar类型

Data  Percent1 Percent2 Percent3
1     3%        4%        6%
2     6%        8%        7%
3     8%        6%        8%
我必须计算每行的平均值,所以我得到的结果如下 平均数据

我试图将%列转换为十进制,以便应用平均值函数

select
Case WHEN Isnumeric([Percent1]) = 1
THEN CONVERT(DECIMAL(18,2),Replace([Percent1],'%',''))
ELSE 0 END AS Percent1
from DashboardData
但是我只得到了0个值。我猜出于某种原因,外部函数在内部函数之前运行。有人能告诉我怎样才能做到这一点吗

我知道IsNumeric函数将使其为0,但我在那之前尝试过它,我得到了一个类型不是数字的异常

谢谢这是你想要的吗

select dd.*, s.average      
from dashboarddata dd cross apply
     (select avg(try_convert(numeric(10, 2), replace(pc, '%', ''))) as average
      from values (percent1), (percent2), (percent3)) as v(pc)
     ) s;
这是你想要的吗

select dd.*, s.average      
from dashboarddata dd cross apply
     (select avg(try_convert(numeric(10, 2), replace(pc, '%', ''))) as average
      from values (percent1), (percent2), (percent3)) as v(pc)
     ) s;
SELECT ISNUMERIC“3%”将返回0,其他所有值也将返回0,因此else条件将始终是结果

只需降低%

注意,如果这些值中的任何一个为NULL,则需要对此进行说明,因为NULL+任何值都为NULL

另外,你不想靠太重的东西。。。它可以产生一些你可能没有预料到的结果

select 
    ISNUMERIC('$')      --money which is a numeric value
    ,ISNUMERIC('1e4')   --scientific notation
    ,ISNUMERIC('45D-1') --old scientific notation
    ,ISNUMERIC('.')     --just the decimal portion of a float / decimal
SELECT ISNUMERIC“3%”将返回0,其他所有值也将返回0,因此else条件将始终是结果

只需降低%

注意,如果这些值中的任何一个为NULL,则需要对此进行说明,因为NULL+任何值都为NULL

另外,你不想靠太重的东西。。。它可以产生一些你可能没有预料到的结果

select 
    ISNUMERIC('$')      --money which is a numeric value
    ,ISNUMERIC('1e4')   --scientific notation
    ,ISNUMERIC('45D-1') --old scientific notation
    ,ISNUMERIC('.')     --just the decimal portion of a float / decimal

修复您的架构并使用数字类型存储数字。列的名称应该清楚地表明这些是百分比。如果你真的需要用一个字符串来表示某种类型的单位,因为数字可以不是百分比,那么就为它创建一个额外的列,并将单位存储在那里。谢谢你的回复。但是,该列数据只是来自Excel批量导入,我对此没有太多控制权。给Excel人员一个提示,如果要在数字之后或之前显示单位,则可以格式化单元格。请修复架构并使用数字类型存储数字。列的名称应该清楚地表明这些是百分比。如果你真的需要用一个字符串来表示某种类型的单位,因为数字可以不是百分比,那么就为它创建一个额外的列,并将单位存储在那里。谢谢你的回复。但是,该列数据只是来自Excel批量导入,我对此没有太多控制权。给Excel人员一个提示,如果要在数字之后或之前显示单位,则可以格式化单元格。感谢您的答复Gordon..尝试了此操作,但获取的错误“numeric”不是可识别的内置函数名…使用Sql Server2014@user1221989 . . . numeric是一种数据类型。您可以改为使用十进制。感谢您的回复Gordon..尝试了此操作,但获取的错误“numeric”不是可识别的内置函数名…使用Sql Server2014@user1221989 . . . numeric是一种数据类型。你可以用十进制来代替。大多数人忘记了旧的科学符号大多数人忘记了旧的科学符号