如何仅使用一个表之间的公共ID用另一个表中的多个值更新临时表中的多行?

问题描述

我正在尝试协调另一个数据库表(底部)中的临时表(顶部)中的ID。由于我只有一个在两者之间共有的ID,因此我只会得到临时表中所有行的最高结果(ReconGlobalRemunerationGrantID)。我的目标是获取每个唯一的ID,并以此来更新我的临时表。

enter image description here

现在,我的更新查询很简单,我使用两个表之间的公共ID进行更新。是否可以使用函数或其他命令语句来获得预期的结果?

update tgrg set ReconGlobalRemunerationGrantID = grg.GlobalRemunerationGrantID from @GlobalRemunerationGrant tgrg
join @GlobalRemuneration tgr on tgr.GlobalRemunerationID = tgrg.GlobalRemunerationID
join DataCore..GlobalRemuneration gr on gr.CompanyID = @CompanyID and gr.FiscalYearID = tgr.FiscalYearID and gr.DirectorDetailID = tgr.DirectorDetailID and tgr.GlobalRoleIDCODE = gr.GlobalRoleID
join DataCore..GlobalRemunerationGrant grg on gr.GlobalRemunerationID = grg.GlobalRemunerationID

谢谢。

解决方法

基于注释-您有2个值要匹配,而不仅仅是一个?例如GlobalRemunerationID和GlobalRemunerationGrantID?

这是使用表“ temptable”和“ t1”的示例

UPDATE temptable
SET    ReconGlobalRemunerationGrantID = t1.GlobalRemunerationGrantID
FROM   temptable
       INNER JOIN t1 ON temptable.GlobalRemunerationID = t1.GlobalRemunerationID
                    AND temptable.GlobalRemunerationGrantID = t1.GlobalRemunerationGrantID

在下面更新

以下版本采用两个数据集

  • 按GlobalRemunerationID对其进行分区,并按ReconGlobalRemunerationGrantID对其进行排序以获取“行号”(rn)
  • 将他们加入GlobalRemunerationID并按rn顺序获取它们

下面是键控代码(抱歉,表与您的完整表略有不同-匹配您提供的数据集)。


; WITH tgrg AS
        (SELECT  GlobalRemunerationID,ReconGlobalRemunerationGrantID,ROW_NUMBER() OVER (PARTITION BY GlobalRemunerationID ORDER BY GlobalRemunerationGrantID) AS rn
            FROM #GlobalRemunerationGrant
        )
    UPDATE  tgrg 
    SET     ReconGlobalRemunerationGrantID = tgr.GlobalRemunerationGrantID 
    FROM    tgrg
            INNER JOIN 
               (SELECT   GlobalRemunerationID,GlobalRemunerationGrantID,ROW_NUMBER() OVER (PARTITION BY GlobalRemunerationID ORDER BY GlobalRemunerationGrantID) AS rn
                    FROM GlobalRemuneration
                ) AS tgr ON tgrg.GlobalRemunerationID = tgr.GlobalRemunerationID AND tgrg.rn = tgr.rn 

那里有全套db<>fiddle-请注意,我更改了一些ID以证明它不是在使用它们进行匹配。