sql - 修改 WHERE 声明以包括/排除某些患者
问题描述
2个类似的SQL Server问题:
db_members 是一个成员级别的表,按 Patient_id、provider_id 和 level_of_care_id 分类。
目的是将患者从不同的聚集水平中拉出来。
在第一个查询中,我们希望从这 6 个护理级别中提取所有患者,但对于 LOC 100.007,我们需要从一个 provider_id ('119282') 中排除患者;
在第二个查询中,我们希望从这 6 个护理级别中提取所有患者,但对于 LOC 100.007,我们只需要包含 provider_id ('119282') 患者;
(这是查询的简化版本)
select patient_id, provider_id, level_of_care_cd,
from db_members
where level_of_care_cd in ('100.001', '100.004', '100.007', '100.022', '100.034', '100.037')
group by level_of_care_cd, provider_id
解决方案
排除具有一个 LOC 的提供商
where level_of_care_cd in ( <full list> )
and not (level_of_care_cd = '100.007' and provider_id = '119282')
只要空值不发挥作用,这就是等效的:
where level_of_care_cd in ( <full list> )
and (level_of_care_cd <> '100.007' or provider_id <> '119282')
允许一个提供者拥有一个 LOC
小心空值:
where level_of_care_cd in ( <full list> )
and not (level_of_care_cd = '100.007' and provider_id <> '119282')
where level_of_care_cd in ( <full list> )
and (level_of_care_cd <> '100.007' or provider_id = '119282')
等价是德摩根定律的结果。使用的表格not
可能会按照人们的思维方式最自然地阅读。请记住,or
它的优先级低于and
所以括号很重要。
推荐阅读
- unreal-engine4 - 如何使用 PlatformGameInstance 而不是 GameInstance
- java - 程序无法编译,因为它期望 { before throw in public constructor() throw exception
- python - 对 FeatureUnions (pandas) 工作理解的困惑
- regex - 多个连续空间的模式验证器
- google-analytics - 如何通过 GTM/GA 对两个单独的结帐进行 A/B 测试
- javascript - 等待外部数据的节点 API
- unity3d - Unity不忽略“忽略Raycast”层中的按钮单击
- python - 使用 OpenSSL 和 Python3 签名数据 - 无法验证签名数据
- python - 按 ID 分组类别 python
- f# - 如何抽象出 Int32 和 Int64 类型的方法?