【问题标题】:A way to search SQL to only pull rows of data that ONLY HAS null value一种搜索 SQL 以仅提取仅具有空值的数据行的方法
【发布时间】:2021-01-01 16:43:52
【问题描述】:

这是我的查询:

SELECT patientname, patientID, 
 (CASE WHEN patientID is not null THEN 'yes'
             WHEN CpatientID is null then 'No'    
        END) as submittedintohospital

FROM dbo].[database](nolock)
and patientname = "John Smith"

这是数据结果:

PatientName                     PatientID
John Smith     12345488999       NULL
John Smith     12880889976       NULL

如您所见,患者有 2 行结果,我想设置一个条件,其中只有所有行 的 PatientID 为 null,则为 yes。

因为我写的当前查询将显示具有空值和非空值的患者​​数据:

例如:

John Wick   1895
John Wick   NULL

我想消除这种情况,只提取所有行必须有 null 患者 ID 的患者姓名,而不仅仅是一行。

【问题讨论】:

标签: sql-server optimization null case row


【解决方案1】:

我想设置一个条件,其中只有 ALL the rows 的 PatientID 为 null,然后它将进入 case for yes。

你可以使用窗口函数:

select patientname, patientid, 
    case when max(patientid) over(partition by patientname) is null     
        then 'yes'
        else 'no'    
    end as submittedintohospital
from [dbo].[database]

如果你想实际过滤结果:

select patientname, patientid
from (
    select d.*, 
        max(patientid) over(partition by patientname) max_patientid
    from [dbo].[database] d
) d
where max_patientid is null

not exists 也可以用于过滤:

select d.*
from [dbo].[database] d
where not exists (
    select 1 
    from [dbo].[database] d1
    where d1.patientname = d.patientname and d1.patientid is not null
)

【讨论】:

  • 你好,我在另一个数据库上做join,现在有一些语法错误,你能看一下吗?
  • @GBM 嘿,你看看我发布的新问题吗?
猜你喜欢
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
相关资源
最近更新 更多