条件连接具有多对多的关系

时间:2019-04-09 15:49:17

标签: sql proc-sql

我正在处理索赔数据并根据其他费用表对索赔重新定价。所以我有两个桌子。索赔和安排。在这种情况下,重新定价归结为CPT_Code和Modifier。所以我有条件地加入

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

以下是时间表的外观:

CPT || Modifier || Price

77325   ||   26 || 73.25

77325   ||   TC || 52.77

77325   ||   XX || 101.21 

77333   ||   XX || 12.31

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

CPT   || Modifier
77333 || TC

但是该时间表可能有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

但是,如果Claims表具有:

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

但是fschedule仅具有:

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

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

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

简而言之,我需要将两个表结合在一起:

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

但是,如果Claims表具有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 ||            || 

谢谢

1 个答案:

答案 0 :(得分:0)

更简单的接通条件可以解决问题:

Private Sub CmdDelete_Click() Dim i As Long If ListBox1.ListIndex = -1 Then Exit Sub For i = Range("A1000000").End(xlUp).Row To 1 Step -1 If Cells(i, 1) = ListBox1.List(ListBox1.ListIndex, 0) Then Rows(i).Delete End If Next i End Sub