【发布时间】:2021-08-06 02:18:02
【问题描述】:
我需要创建具有以下要求的 SQL Server 用户定义函数/SP(普通函数或表值函数):
- 4 个表(Table_A、Table_B、Table_C、Table_D)的数据应根据修复属性(下例中的名称)进行匹配
- 如果数据在所有 4 个表中都匹配,则获得最高分并创建 uniqueID。例如匹配类型 = ABCD
- 如果数据在 3 个表的其他组合中匹配,则会获得一些分数和不同的 UniqueID。例如匹配类型 = ABC、ABD、BCD、CDA
- 如果数据在 2 个表的其他组合中匹配,则它会获得一些分数和不同的 UniqueID。例如匹配类型 = AB、AC、AD、BC、BD、CD
- 不匹配的记录将获得 0 分,单独的 UniqueID 将存储在同一个表中。
表_A
AID | Name | ZipCode
表_B
BID | Name | ZipCode
表_C
CID | Name | ZipCode
表_D
DID | Name | ZipCode
它匹配 Name 和 ZipCode 属性
最终或匹配并合并表:
UID | AID | BID | CID | DID | Match_Score
请建议我们如何为上述要求创建函数/存储过程。如果我们可以使它变得健壮和可扩展会更好,即如果再添加一个表,则逻辑应该只需最少的代码更改即可工作。
非常感谢您在这种情况下的帮助。
我可以想到下面的方法,但不确定是否可以编码-
ABCD (Output of the table where all the record matches)
UNION ALL
ABC (This will run only on the records that are not par of the ABCD result)
UNION ALL
ACD (This will run only on those records which are not a part of the above 2 results)
UNION ALL
and on and on
【问题讨论】:
-
我的朋友,这看起来像是一个完整的家庭作业,你需要发布一些代码并努力解决它失败的地方。
-
@Transformer - 感谢 cmets,在后台处理代码。很快就会发布。抱歉,我正在寻找更多的方法。谢谢
-
请始终提供minimal reproducible example 即示例数据(理想情况下为 DDL+DML 或格式化文本)、您的尝试、实际结果和预期结果。此外,您还没有接受对您之前问题的回答 - 这是本网站的预期礼仪。
-
@DaleK - 当然我会记住,我现在已经测试并接受了上一个问题的答案。谢谢
标签: sql sql-server stored-procedures sql-server-2012 sql-function