首页 > 解决方案 > 条件加入多对多关系

问题描述

我正在处理索赔数据并根据不同的费用表重新定价索赔。所以我有两张桌子。索赔和fschedule。在这种情况下,重新定价归结为 CPT_Code 和 Modifier。所以我有条件地加入他们

claims.CPT = fschedule.CPT 
AND 
claims.mod = fschedule.mod

这是 fschedule 的外观:

CPT || Modifier || Price

77325   ||   26 || 73.25

77325   ||   TC || 52.77

77325   ||   XX || 101.21 

77333   ||   XX || 12.31

但是,我的问题是索赔表可能有:

CPT   || Modifier
77333 || TC

但是 fschedule 可能有 77333 但没有 TC 或 26 只有 XX。所以我希望表格同时加入

claims.CPT = fschedule.CPT 
AND 
claims.mod = f.schedule.mod

但是如果 fschedule 中没有匹配项,那么我希望它在 fschedule 修饰符 XX 时匹配

我正在尝试使用 case 语句有条件地连接这两个表。

FROM
claims as c
LEFT JOIN
fschedule as f
ON
CASE WHEN c.mod IN ('TC','26') THEN
                                   CASE WHEN f.mod IN ('TC','26') AND c.cpt= f.cpt AND c.mod = f.mod THEN c.cpt = f.cpt AND c.mod = f.mod
                                        WHEN f.mod NOT IN ('TC','26') AND c.cpt= f.cpt AND c.mod <> f.mod THEN c.cpt = f.cpt AND c.mod <> f.mod
                                         END

WHEN c.mod NOT IN ('TC','26') AND f.mod NOT IN ('TC','26') THEN c.cpt = f.cpt AND c.mod = f.mod 
END;

我需要使用有条件的左连接,例如:

Claims as c
LEFT JOIN
fschedule as f
ON
c.CPT = f.CPT
AND
c.mod = f.mod

但是,如果索赔表有:

CPT   || Modifier || Paid
77333 || TC       || 7.88

但 fschedule 只有:

CPT   || Modifier || Price
77333 || XX       || 12.31

我需要索赔表仍然输出在 fschedule 表中找到的 12.31 的价格。XX 修饰符表示不存在修饰符。

在将其加入 fschedule 表之前的 Claims 表有 22,124 行数据。将它们与我当前的代码连接后,该表输出 25,283 行数据。我需要输出保持 22,124。

简而言之,我需要将两张表连接在一起:

c.cpt = f.cpt
AND
c.mod = f.mod

但是如果索赔表有 CPT 代码和修饰符,但 fschedule 只有 CPT 代码并且没有修饰符匹配,那么我需要强制 fschedule 输出带有修饰符 XX 的价格,因为它没有 TC 或 26 修饰符.

谢谢您的帮助。

*************更新问题**************

理赔表:

CPT   || Mod || Paid

77067 || TC  || 83.10

费用表

CPT   || Mod || Price
77067 || 26  || 76.23
77067 || XX  || 103.01

因此,即使索赔表有修饰符 TC,但费用表有代码但没有修饰符,我仍然希望它在修饰符 = XX 时使用费用表连接到索赔表。所以我希望最终结果看起来像:

CPT   || Mod  || Paid  || Fees_Price || Fees_Mod
77067 || TC   || 83.10 || 103.01     || XX

截至目前,这是输出:

CPT   || Mod  || Paid  || Fees_Price || Fees_Mod
77067 || TC   || 83.10 ||            || 

谢谢

标签: sqlproc-sql

解决方案


一个更简单的 ON 条件可以解决问题:

ON (c.CPT = f.CPT AND c.mod = f.mod) OR (c.CPT = f.CPT AND f.mod ='xx' AND f.CPT NOT IN (SELECT CPT FROM Fees WHERE mod<>'xx'))


推荐阅读