Sql server 基于同一表上列中的相同值更新表

Sql server 基于同一表上列中的相同值更新表,sql-server,Sql Server,我有一张这样的桌子 InsuredID | EmployeeNumber | MemberTypeID | LinkedMemberID ---------------------------------------------------------------- 1001012 | 39018 | 102 | 0 1001061 | 39018 | 100 | 0 100114

我有一张这样的桌子

InsuredID   | EmployeeNumber    | MemberTypeID  | LinkedMemberID
----------------------------------------------------------------
1001012     | 39018             | 102           | 0
1001061     | 39018             | 100           | 0
1001147     | 39019             | 102           | 0
1001196     | 39019             | 100           | 0
我需要将此表中的LinkedMemberID更新为具有相同EmployeeNumber和MemberTypeID=100的所有非100成员类型的保险ID的值

MemberTypeID=100的LinkedMemberID将保持为0

更新后,表应该如下所示

InsuredID   | EmployeeNumber    | MemberTypeID  | LinkedMemberID
----------------------------------------------------------------
1001012     | 39018             | 102           | 1001061 
1001061     | 39018             | 100           | 0
1001147     | 39019             | 102           | 1001196 
1001196     | 39019             | 100           | 0
我尝试过各种SQLupdate语句,但不知道如何执行。我正在使用SQLServer2008。请提供帮助。

您可以使用应用功能:

SELECT
    t.InsuredID,
    EmployeeNumber,
    MemberTypeID,
    LinkedMemberID = CASE WHEN t.MemberTypeID = 100 THEN LinkedMemberID ELSE x.InsuredID END
FROM tbl t
OUTER APPLY (
    SELECT InsuredID
    FROM tbl
    WHERE EmployeeNumber = t.EmployeeNumber
    AND MemberTypeID = 100
)x
将其转换为UPDATE语句:

UPDATE t
    SET t.LinkedMemberID = x.InsuredID
FROM tbl t
OUTER APPLY (
    SELECT TOP 1 InsuredID
    FROM tbl
    WHERE EmployeeNumber = t.EmployeeNumber
    AND MemberTypeID = 100
    ORDER BY InsuredID DESC
)x
WHERE t.MemberTypeID <> 100

如果我理解正确,您需要一个update语句,并且可以使用join执行您想要的操作:

您可以尝试以下方法:

UPDATE Your_Table
SET LinkedMemberID = (SELECT TOP 1 T.InsuredID
                      FROM Your_Table T
                      WHERE T.EmployeeNumber = Your_Table.EmployeeNumber
                         AND T.MemberTypeID  = 100)
WHERE MemberTypeID <> 100

您的查询:选择not UpdateThaks以快速返回。我确实尝试了你的代码,但我以前没有使用过外部应用。我现在正在读这篇文章,希望我们能在其他地方有所帮助。没问题。我建议你读一下保罗·怀特在《申请》上写的这两篇优秀的文章。而且效果很好!非常感谢你。我试图写一个类似的update语句,但无法完成。这是我的完整更新语句:更新t_policy_insured Set LinkedMemberID=t.InsuredID From t_policy_insured internal join t_policy_insured.EmployeeNumber=t.EmployeeNumber=t.EmployeeNumber和t.MemberTypeID=100,其中t_policy_insured.MemberTypeID 100SQL更新语句:更新t_policy_保险集LinkedMemberID=t.InsuratedId From t_policy_insurated Inner join t_policy_insurated t on t_policy_insurated.EmployeeNumber=t.EmployeeNumber和t.MemberTypeID=100,其中t_policy_insurated.MemberTypeID 100同样有效。这句话简单易懂。非常感谢。
UPDATE Your_Table
SET LinkedMemberID = (SELECT TOP 1 T.InsuredID
                      FROM Your_Table T
                      WHERE T.EmployeeNumber = Your_Table.EmployeeNumber
                         AND T.MemberTypeID  = 100)
WHERE MemberTypeID <> 100