用几个条件更新一个值

updating a value with several conditions

我正在尝试添加几个条件。我想用中间值的自身总和更新 base2,我想 post 一些关于中间值和 base2 的条件。

我在数据库中手动修改了 table。 intermediatevalue是table中的其中一列,是根据base2值计算的, 在第一行,我有一个 base2 值,我计算得到第一行的中间值,现在在第二行,我需要设置新的 base2=previous base2+previous 中间值。这就是为什么我有两个计数器来跟踪项目的位置。 counter1 统计 itemid 的索引,counter2 跟踪 itemid

内部循环的计数

问题是如何设置这个新的base2。是否可以在一条线上设置我的新 base2?或者我是否必须将另一个变量设置为前一行中的中间值并将其作为新变量添加到 base2?

下面是我想要的,但有错误(缺少功能)。

UPDATE TABLE2 SET base2=   
    (base2+INTERMEDIATEVALUE WHERE loadingordinal=counter2 AND itemid=counter1)    
WHERE loadingordinal=counter2 +1 AND itemid=counter1

我不确定 INTERMEDIATEVALUE 是什么,但如果它是 table 那么您可以按照下面的查询进行操作,或者您可以调整它。您可以执行子查询以实现这种类型的条件

UPDATE TABLE2 
SET base2 = base2 + (SELECT * 
                     FROM INTERMEDIATEVALUE 
                     WHERE loadingordinal=counter2 AND itemid=counter1) 
WHERE loadingordinal=counter2 +1 AND itemid=counter1

在 VFP 中,通过 Update_SQL 进行此类更新很困难。幸运的是,有很多方法可以解决这个问题,其中一种是使用 xBase 命令(在 xBase 中,您可以使用 REPLACE 进行 SQL-UPDATE。默认情况下,Replace 在 "current row" 上运行(不包括范围子句)。您没有提供任何架构或任何示例数据,因此我将仅通过猜测提供一个简单的示例。您的代码如下所示:

local lnPrevious, lnItemId
lnItemId = -1
Select Table2
Scan
      && Save Current Id (ItemID?)
      lnItemId = Table2.ItemID
      && Do calculation using previous value
      && On first row it is the same as base2
      lnPrevious = base2
      scan While Table2.ItemId = m.lnItemId
          Replace Base2 with m.lnPrevious, ;
                  IntermediateValue with DoCalculation(Base2)
          && Previous value for next row
          lnPrevious = Base2 + IntermediateValue    
      endscan   
      skip -1 && Endscan would move the pointer
Endscan

请注意,如果您需要的不仅仅是 ItemId(或者可能传递 Base2 和 IntermediateValue 本身而不是 lnPrevious),您也可以这样做:

local loRow
scan 
   scatter to name loRow memo
   scan while table2.ItemId = m.loRow.ItemId
   ...