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中的百分比。