【问题标题】:SQL UPDATE on with data from same table使用同一表中的数据进行 SQL UPDATE
【发布时间】:2022-01-19 00:25:41
【问题描述】:

我有一个表的下一个情况,需要从同一个表中的行更新行,如您在此处看到的:

表格

ID SN FID
1 12345 1
2 1122 2
3 12345-RG NULL
4 1122-RG NULL

我需要从第 1 行的 FID 列更新第 3 行(相同的 SN,仅在末尾不同的结尾 -RG) 从第 2 行 Column FID 更新第 4 行(相同的 SN,不同的结尾 -RG)

所以结果应该是:

表格

ID SN FID
1 12345 1
2 1122 2
3 12345-RG 1
4 1122-RG 2

我尝试了很多方法,但我不明白这个...我尝试声明一个临时表并尝试从那里进行比较,但仍然遇到这个问题...

【问题讨论】:

  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。

标签: sql sql-server sql-update temp-tables insert-update


【解决方案1】:

假设[SN]-RG 扩充

示例

with cte as (
Select * 
      ,NV = max(FID) over (partition by replace(SN,'-RG','') )
 From YourTable
)
Update cte set FID = NV 
 --Where FID is null  -- Optional

更新后的表格

ID  SN          FID
1   12345       1
2   1122        2
3   12345-RG    1
4   1122-RG     2

【讨论】:

  • -RG 序列号 SN 已经创建,但 FID 为 NULL,所以我只想更新 FID,将 -RG 项目与没有 -RG 的相同项目进行比较(它们是相同的序列号,但序列号的结尾不同)
  • @user3128539 很确定这就是我们正在做的事情。也许您可以在临时表上确认。
  • @user3128539 看看dbfiddle.uk/…
  • 非常感谢您的帮助和时间!
猜你喜欢
  • 2021-06-24
  • 2015-05-18
  • 2011-09-28
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多