【问题标题】:How do I select doctors that didn't admint any patients如何选择没有管理任何患者的医生
【发布时间】:2020-05-09 01:41:14
【问题描述】:

在我的数据库中没有没有看过任何病人的医生,所以我想在第一列下有一个文本“没有没有收治任何病人的医生”。

   SELECT d.FistName + ' ' + d.LastName as 'Doctors who has not admitted any patients      
      COUNT(w.PatientID) as [Patient count] 
      FROM Doctors d 
      left join Visits v on d.DoctorID=w.DoctorID 
     GROUP BY d.FistName + ' ' + d.LastName HAVING COUNT(DISTINCT PatientID) = 0;

【问题讨论】:

  • 你最好按d.DoctorID分组。否则两个同名医生将显示为一个。
  • 我在这里没有看到任何问题?
  • 我真的建议不要使用需要分隔标识的列名;当然Doctors who has not admitted any patients 是一个过长的名字。至于你有什么,有什么问题? (此外,您的代码中有一个不幸的印刷错误FirstName
  • @Larnu 起初我没有看到印刷错误,但现在我无法取消它。哈哈
  • 这个问题不好,1.请提供样本数据。 2.您确实了解您的查询有很多错误。 @Larnu 已经指出了其中的一些,同样在计数之前你错过了一个逗号, 你以错误的方式使用别名(两个表和三个别名......)我从你之前的问题中看到你没有被警告关于问题的质量。欢迎来到 Stack Overflow,请为我们提供更好的问题,提供更多示例数据和预期结果数据。干杯!

标签: sql join select case ssms


【解决方案1】:

不知道你在问什么,但如果你想找到没有病人的医生,我会这样写你的查询:

select
<some stuff>
from
doctors d
left join visits v
 on v.doctorid = v.doctorid
where
 v.doctorid is null

这将从您的医生表中获取所有在就诊表中没有任何匹配项的记录,无需进行任何聚合。这是一个非常标准的模式。你也可以做not exists类型查询。

【讨论】:

  • v - w 的错误取自问题...可能令人困惑...两个表三个别名
  • 直接从 OP 的查询中复制(没有注意到连接中的 w 别名,只是选择列表),但我怀疑它应该是 v.doctor id。编辑了帖子。
  • 不清楚的帖子值得反对、接近投票和 cmets,而不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多