替换SQL中的值(Microsoft Access)

时间:2012-10-19 10:20:46

标签: sql ms-access

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

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

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

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

由于

2 个答案:

答案 0 :(得分: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])

答案 1 :(得分:0)

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

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

id指的是主键