【问题标题】:Replacing Values in SQL (Microsoft Access)替换 SQL 中的值 (Microsoft Access)
【发布时间】:2012-10-19 10:20:46
【问题描述】:

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

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-0102408077-5102替换),然后b被c替换(408077-5102是替换为第一行中的408077-5102S)。

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

谢谢

【问题讨论】:

  • 请将您的问题发布得更具描述性。请清楚地传达您想要的输出。
  • 什么是a、b和c,它位于哪一列?你能提供样本数据和你想要的结果集吗?
  • 好的,这里是示例数据: id PartNumber ReplacedNumber 1 408077-5102 408077-5102S 2 408077-0102 408077-5102 可以看到,第二行的值被替换(a被替换b,在这种情况下 408077-0102 被 408077-5102 替换),然后 b 被 c 替换。 (408077-5102 在第一行被 408077-5102S 替换。这意味着 a = c。我想避免重复替换值。我希望现在更清楚了。谢谢
  • 你只需说出你需要的输出是什么
  • @KristiaProkopiou 你如何决定哪个值被哪个替换? 408077-5102如何转换为408077-5102S,408077-0102如何转换为408077-5102?标准是什么?也请粘贴您的表格结构

标签: sql ms-access


【解决方案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])

【讨论】:

  • 看起来它可以工作。非常感谢,我会同时尝试并回复您。
【解决方案2】:

如果该表有主 ID,您可以更新该表

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

id指主键

【讨论】:

  • 好的,这里是示例数据: id PartNumber ReplacedNumber 1 408077-5102 408077-5102S 2 408077-0102 408077-5102 可以看到,第二行的值被替换(a被替换b,在这种情况下 408077-0102 被 408077-5102 替换),然后 b 被 c 替换。 (408077-5102 在第一行被 408077-5102S 替换。这意味着 a = c。我想避免重复替换值。我希望现在更清楚了。谢谢
  • @KristiaProkopiou:请不要将代码示例或示例数据放入 cmets - 因为您无法对其进行格式化,所以阅读它非常困难。 ... 相反:更新您的问题,通过编辑它来提供附加信息!谢谢。
  • 我很抱歉。我是新手,我刚注册,所以请给我一些时间来学习如何使用该网站。感谢您的耐心等待
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多