基于从另一个数据点排除查找数据点的SQL查询

基于从另一个数据点排除查找数据点的SQL查询,sql,Sql,我不知道这个标题有多有用,所以让我直接开始吧 下面是一个查询和处理结果集,让您了解我的工作内容: select PRACT_ID, ID_Number, DocumentName from Practitioner_ID_Numbers where PRACT_ID = 1193 Pract_ID=人员的唯一标识符 ID\u编号=与文档关联的标识号 DocumentName=标识文档类型,例如,id_编号可以是555555-1234,DocumentName可以是“电话号码” 因此,我需要做

我不知道这个标题有多有用,所以让我直接开始吧

下面是一个查询和处理结果集,让您了解我的工作内容:

select PRACT_ID, ID_Number, DocumentName
from Practitioner_ID_Numbers 
where PRACT_ID = 1193
Pract_ID=人员的唯一标识符

ID\u编号=与文档关联的标识号

DocumentName=标识文档类型,例如,id_编号可以是555555-1234,DocumentName可以是“电话号码”


因此,我需要做的是编写一个查询,以标识没有documentname类型“NPI编号”条目的所有pract_id。

您可以使用聚合:

select PRACT_ID
from Practitioner_ID_Numbers 
group by PRACT_ID
having sum(case when DocumentName = 'NPI number' then 1 else 0 end) = 0;

您可以使用聚合:

select PRACT_ID
from Practitioner_ID_Numbers 
group by PRACT_ID
having sum(case when DocumentName = 'NPI number' then 1 else 0 end) = 0;

排除问题很容易解决,但不存在:

select distinct PRACT_ID
from Practitioner_ID_Numbers p
where not exists (
  select 1 from Practitioner_ID_Numbers
  where PRACT_ID = p.PRACT_ID and DocumentName = 'NPI number'
)

排除问题很容易解决,但不存在:

select distinct PRACT_ID
from Practitioner_ID_Numbers p
where not exists (
  select 1 from Practitioner_ID_Numbers
  where PRACT_ID = p.PRACT_ID and DocumentName = 'NPI number'
)

您可以将从业者的记录集加入从业者的ID号码,以确定哪些从业者没有NPI

在这里,我使用的是基于从业者ID号的CTE,但如果您有一个单独的表存储从业者,您可以使用它:

WITH Practitioners(PRACT_ID) AS ( SELECT DISTINCT PRACT_ID FROM Practitioner_ID_Numbers ) SELECT Practitioners.PRACT_ID FROM Practitioners LEFT JOIN Practitioner_ID_Numbers AS ProviderNPIs ON ProviderNPIs.PRACT_ID = Practitioners.PRACT_ID AND ProviderNPIs.DocumentName = 'NPI number' WHERE ProviderNPIs.PRACT_ID IS NULL 请注意,在连接中,我们指出我们只关注DocumentName为NPI编号的记录。然后,我们在WHERE子句中指出,我们需要具有空PRACT_ID的记录。这就是我们确定哪些从业者缺少NPI的方式

另外还有几个注意事项:

您的命名约定有点不稳定:不一致的下划线大小写使用会使查询变得棘手该字段是否有下划线? 为什么需要将“无”存储为ID号?如果提供程序缺少一个ID,那么该值不是空值,还是不存在于表中? 希望您的ID类型、州许可证、DEA编号等存储在单独的查找表中。 您可能需要重新考虑属性名DocumentName。像ID_类型这样的东西可能更合适。
您可以将从业者的记录集加入从业者的ID号码,以确定哪些从业者没有NPI

在这里,我使用的是基于从业者ID号的CTE,但如果您有一个单独的表存储从业者,您可以使用它:

WITH Practitioners(PRACT_ID) AS ( SELECT DISTINCT PRACT_ID FROM Practitioner_ID_Numbers ) SELECT Practitioners.PRACT_ID FROM Practitioners LEFT JOIN Practitioner_ID_Numbers AS ProviderNPIs ON ProviderNPIs.PRACT_ID = Practitioners.PRACT_ID AND ProviderNPIs.DocumentName = 'NPI number' WHERE ProviderNPIs.PRACT_ID IS NULL 请注意,在连接中,我们指出我们只关注DocumentName为NPI编号的记录。然后,我们在WHERE子句中指出,我们需要具有空PRACT_ID的记录。这就是我们确定哪些从业者缺少NPI的方式

另外还有几个注意事项:

您的命名约定有点不稳定:不一致的下划线大小写使用会使查询变得棘手该字段是否有下划线? 为什么需要将“无”存储为ID号?如果提供程序缺少一个ID,那么该值不是空值,还是不存在于表中? 希望您的ID类型、州许可证、DEA编号等存储在单独的查找表中。 您可能需要重新考虑属性名DocumentName。像ID_类型这样的东西可能更合适。
哦,我完全明白这是为什么,谢谢你的发帖!尽管这引发了一个问题:在“不存在”部分,您编写了“选择1”。我的理解是1将与第一列相关。您是否简单地假设表的主键pract_id将是第一列?选择1表示选择任何内容。它可以是select 0或select*,也不会有任何区别。这里唯一重要的是结果的存在。哦,我完全明白为什么这样做有效,谢谢你的发帖!尽管这引发了一个问题:在“不存在”部分,您编写了“选择1”。我的理解是1将与第一列相关。您是否简单地假设表的主键pract_id将是第一列?选择1表示选择任何内容。它可以是select 0或select*,也不会有任何区别。这里唯一重要的是结果的存在。我知道它是如何工作的,虽然它比我希望用于操作的时间要长一点,但我非常感谢您花时间发布!至于你的笔记,相信我,我并没有忘记这一点。哈哈,我正在使用的这个数据库还没有得到维护或策划,肯定有一些值得怀疑的设计特点。获取这些数据是我尝试重新设计和构建一个更有意义的新数据库的第一步。我知道它是如何工作的,尽管它比我希望用于操作的时间长了一点,但我非常感谢您花时间发布!至于你的笔记,相信我,我并没有忘记这一点。哈哈,我正在使用的这个数据库还没有得到维护或策划,肯定有一些值得怀疑的设计特点。获取这些数据是我试图重新设计和构建一个更有意义的新数据库的第一步。