如何基于procedure列特征获取所有关联claim行?SQL
获取包含指定procedure的claim的全部行
需求说明:需要提取所有包含procedure为900的claim对应的全部数据行。例如在下表中,claim 1存在procedure 900,因此要保留claim 1的两行记录;而普通的WHERE procedure = 900只能筛选出procedure为900的那一行,无法拿到同claim下的其他行。
示例数据:
| claim | procedure |
|---|---|
| 1 | 900 |
| 1 | 600 |
| 2 | 500 |
| 2 | 600 |
解决方案
以下是三种常用的SQL实现方式:
方法1:子查询筛选目标claim
通过子查询先找出所有包含procedure 900的claim,再从原表中提取这些claim的全部行:
SELECT t.* FROM your_table t WHERE t.claim IN ( SELECT DISTINCT claim FROM your_table WHERE procedure = 900 );
方法2:窗口函数标记目标claim
使用窗口函数为每个claim标记是否包含procedure 900,再筛选标记为"存在"的行:
SELECT claim, procedure FROM ( SELECT claim, procedure, MAX(CASE WHEN procedure = 900 THEN 1 ELSE 0 END) OVER (PARTITION BY claim) AS has_900 FROM your_table ) sub_query WHERE has_900 = 1;
方法3:自连接匹配目标claim
通过自连接找到包含procedure 900的claim,再关联原表获取该claim的所有行:
SELECT DISTINCT t.* FROM your_table t JOIN your_table t_match ON t.claim = t_match.claim WHERE t_match.procedure = 900;
内容的提问来源于stack exchange,提问作者shot040
相关产品推荐
相关产品推荐

