获取具有与特定模式匹配的连接列的行
Posted
技术标签:
【中文标题】获取具有与特定模式匹配的连接列的行【英文标题】:Get rows with joined column matching a specific pattern 【发布时间】:2015-03-31 16:49:59 【问题描述】:好的 - 我有一个带有声明 ID 和过程代码混合的表 - 我需要做的是隔离仅存在以 8 开头的过程代码的声明 ID - 所以在下面,我需要能够只抓取那些带有 claimID 的记录,其中存在 claimID LIKE '8%' 代码 - 没有其他 procedureCodes 等 - 所以只有下面的 2 和 3 个 claimID
claimID procedureCode
1 85025
1 97110
2 85025
2 80102
3 87112
3 81020
如果有任何以不同数字开头的索赔记录,我想排除索赔 ID。
【问题讨论】:
使用 WHERE NOT EXISTS 子句。 claimID,其中所有 procedureCode 都以 '8' 开头?1 85025
记录呢?
@JoelCoehoorn,它会被排除,因为 ID 1 也有一个以 9 开头的过程代码
想一边编辑主题行吗? :) 充其量只是误导。
【参考方案1】:
SELECT DISTINCT yt1.ClaimID
FROM YourTable yt1
WHERE yt1.procedureCode LIKE '8%'
AND NOT EXISTS (SELECT 1
FROM YourTable yt2
WHERE yt2.ClaimID = yt1.ClaimID
AND yt2.procedureCode NOT LIKE '8%');
【讨论】:
【参考方案2】:我们分三步完成。第一步是查找不符合“无其他前导数字”要求的记录。第二步是查找满足“必须以 8 开头”要求的记录。第三步是将这两个集合与exclusion join 进行匹配,这样我们就可以从步骤 2 中获取集合,并从步骤 1 中排除集合:
我们还需要知道procedureCode
列的数据类型。了解一点CPT codes,我希望char(5)
或类似是最合适的选择,具体取决于您如何处理修饰符。如果这是您存储它的方式,那么这应该可以工作:
With BadClaims As ( --Step 1
SELECT distinct ClaimID
FROM [Table]
WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
SELECT distinct ClaimID
FROM [Table]
WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
但是,您可能已将其存储为整数/数字字段。如果是这种情况,这应该可行:
With BadClaims As ( --Step 1
SELECT distinct ClaimID
FROM [Table]
WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
SELECT distinct ClaimID
FROM [Table]
WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
这是一个很长的表格,用来解释这里发生了什么。您还可以将这些步骤简化为单个自联接:
SELECT distinct t1.claimID
FROM [Table] t1
LEFT JOIN [Table] t2 ON t2.claimID = t1.ClaimID and t2.procecureCode NOT LIKE '8%'
WHERE t1.procedureCode LIKE '8%' and t2.claimID IS NULL
【讨论】:
他不想要claimID 1,只想要那些只有procedureCodes 以'8' 开头的那些。 ClaimID 1 有一个以“9”开头的procedureCode 可能希望在您的第二个代码示例中编辑此行:WHERE ClaimID LIKE >= 80000 和 ClaimID以上是关于获取具有与特定模式匹配的连接列的行的主要内容,如果未能解决你的问题,请参考以下文章