计算SQL Server中一行的平均值
我有下表..百分比列是nvarchar类型计算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(
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是一种数据类型。你可以用十进制来代替。大多数人忘记了旧的科学符号大多数人忘记了旧的科学符号