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