Tsql 计算两列的百分比并写回表中
临时表格如下所示:Tsql 计算两列的百分比并写回表中,tsql,sql-server-2000,Tsql,Sql Server 2000,临时表格如下所示: DECLARE @Results TABLE ( CDA varchar(60), Found int default 0, Accepted int default 0, Percentage decimal(3,0) default 0.0, ) 如何将填充的已找到和已接受列写回Pecentage列 我有: UPDATE @Results SET Percentage = ( SELECT (((Acc
DECLARE @Results TABLE (
CDA varchar(60),
Found int default 0,
Accepted int default 0,
Percentage decimal(3,0) default 0.0,
)
如何将填充的已找到和已接受列写回Pecentage列
我有:
UPDATE @Results SET Percentage = (
SELECT (((Accepted * 1.00) / Found) * 100) FROM @Results
)
如果在更新中删除SELECT行注释,它将返回正确的值。但是,在更新上下文中,它失败,子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。声明已终止
如何将值写回正确的行?您需要where子句,例如untested
UPDATE Result oResult
SET Percentage = (SELECT Accepted / Found * 100
FROM Result iResult
WHERE iResult.cda = oResult.cda);
但是,如果这是经过计算的,您可能不希望将其作为列,而是将其添加到任何查询中。注意,大多数数据库都有百分比函数
UPDATE Result
SET Percentage = Accepted / Found * 100
但如果将find和ACCEPTED定义为INT,则它将不起作用,在分割时使用cast或将它们声明为与PERCENTAGE相同的类型。我考虑过查询,但为什么要使查询复杂化?如果我可以将复杂度隐藏在此处,这将成为一个存储过程?它为oResult提供了无效语法。尝试了equals和AS,但两者都不起作用。您使用的是什么数据库?在oracle上工作。>但是当我可以在这里隐藏复杂性时,为什么要使查询复杂化这将成为一个存储过程呢?因为您知道数据将是正确的,并且您不依赖于每次更新值时调用的过程。似乎不允许您在update语句中使用别名表。很抱歉,您无权访问SQL Server,也从未使用过它。以下内容适用于mysql更新结果oResult LEFT JOIN SELECT Accepted/Found*100 AS pc,cda FROM Result AS iResult on iResult.cda=oResult.cda SET oResult.Percentage=iResult.pc;真不敢相信事情竟那么简单!然而,这是一个没有实际意义的问题,因为我最终通过一个表达式计算了reporting services中的百分比。