sql - 条件加入多对多关系
问题描述
我正在处理索赔数据并根据不同的费用表重新定价索赔。所以我有两张桌子。索赔和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 || ||
谢谢
解决方案
一个更简单的 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'))
推荐阅读
- html - 拒绝在 Thymeleaf 中显示图像
- python - 如何在 GRU 的网络中使用 DataParallel 时修复错误
- visual-studio-code - VSCode 自动完成和 IntelliSense 在反引号中不起作用
- javascript - 通过 AJAX 调用 tbody 后,所有数据都在第 1 页中
- node.js - 无法使用nodejs查询clickhouse db
- jupyter-notebook - Google Compute Engine 中的 Jupyter 实验室笔记本实例停止执行并出现 504 错误
- firebase - Firebase 实时数据库 - 包含 uid 的位置索引
- flutter - 颤振的创作工具?
- c# - 如何统一为图像添加水印?
- batch-file - 根据日志文件的输出字符串更改文本颜色的批处理文件