如何不硬编码,从Contract表更新Transaction表的Posting_ID?
解决方案
要实现根据Contract表更新Transaction表的Posting_ID,核心是处理Contract表中逗号分隔的Contract_NM关联逻辑,以下是具体实现:
实现代码
UPDATE t SET t.Posting_ID = c.Posting_ID FROM #Transaction t INNER JOIN #Contract c ON t.Client_NM = c.Client_NM -- 用逗号包裹字符串避免部分匹配,确保精确匹配单个Contract_NM AND CHARINDEX(',' + t.Contract_NM + ',', ',' + c.Contract_NM + ',') > 0
逻辑说明
- 客户匹配:通过
Client_NM关联两张表,确保只更新同一客户的记录 - Contract_NM匹配:
- 给Transaction表的
Contract_NM前后添加逗号(如LC01变为,LC01,) - 给Contract表的逗号分隔
Contract_NM前后添加逗号(如LC01,LC02变为,LC01,LC02,) - 使用
CHARINDEX函数判断单个Contract_NM是否属于对应的分组,避免出现LC01误匹配LC011这类部分匹配问题
- 给Transaction表的
- 批量更新:通过
UPDATE ... FROM语法批量将Transaction表的Posting_ID替换为Contract表中对应分组的Posting_ID
验证结果
执行更新后,查询Transaction表即可看到更新后的结果:
SELECT * FROM #Transaction
预期输出:
| ID | Posting_ID | Contract_NM | Client_NM |
|---|---|---|---|
| 1 | 94265 | LC01 | ACA |
| 2 | 94265 | LC02 | ACA |
| 3 | 12422 | LC03 | ACA |
| 4 | 94260 | LC04 | ACA |
| 5 | 94260 | LC05 | ACA |
内容的提问来源于stack exchange,提问作者Aparanjit
相关产品推荐
相关产品推荐

