3

所以:我有一张小桌子,看起来像:

PartNumber  ReplacedNumber
408077-5102 408077-5102S
408077-0102 408077-5102

正如您在此处看到的,我想将零件号替换为已替换的编号,问题是如果 a 被 b 替换,b 被 c 替换,那么这意味着 a 被 c 替换。

有人知道这样做的方法吗?

谢谢你的帮助

更新:
好的,这是示例数据:

id PartNumber   ReplacedNumber
1  408077-5102  408077-5102S
2  408077-0102  408077-5102

如您所见,第 2 行中的值被替换(a 被 b 替换,在这种情况下408077-0102被替换为408077-5102),然后 b 被 c408077-5102替换(408077-5102S在第 1 行中被替换为)。

这意味着a = c。我想避免重复替换值。我希望现在更清楚了。

谢谢

4

2 回答 2

1

如果 a 被 b 替换,b 被 c 替换,则意味着 a 被 c 替换可以写成:

SELECT
  Replace.ID,
  Replace.PartNumber,
  IIF(Not IsNull([Replace_1].[ReplacedNumber]),
      [Replace_1].[ReplacedNumber],
      [Replace].[ReplacedNumber])
FROM
  Replace LEFT JOIN Replace AS Replace_1
    ON Replace.ReplacedNumber = Replace_1.PartNumber

(这是一个 SELECT 查询,但它可以很容易地在 UPDATE 查询中转换)但这并不能解决 c 被 d 替换的情况,这(我想)也意味着 a 被 d 替换。

我认为这里唯一的解决方案是使用递归函数:

Function searchReplaced(ReplacedNumber) as Variant
  Dim Look As Variant

  Look = DLookup("ReplacedNumber",
                 "Replace",
                 "PartNumber=""" & ReplacedNumber & """")

  If IsNull(Look) Then
    searchReplaced = ReplacedNumber
  Else
    searchReplaced = searchReplaced(Look)
  End If

End Function

然后你只需启动这个 UPDATE 查询:

UPDATE Replace
SET Replace.ReplacedNumber = searchReplace([Replace].[ReplacedNumber])
于 2012-10-20T08:12:07.340 回答
0

如果该表具有主 ID,则只需更新该表

update table set partnumber=replacednumber where id=id of the column you want to replace

id 指主键

于 2012-10-19T10:31:14.483 回答