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 は c に置き換えられます ( 1 行目の408077-5102は に置き換えられ408077-5102Sます)。

これは 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 に答える