【问题标题】:SQL: Pull values that match values in another table firstSQL:首先拉取与另一个表中的值匹配的值
【发布时间】:2015-09-01 22:11:38
【问题描述】:

我为工作创建了一个调度应用程序,但遇到了一个问题,我花了很多天试图解决这个问题,但没有成功。该应用程序从包含 Patients 表、Clinician 表和 Appointments 表的数据库中提取信息。

目前,当用户从应用程序的下拉列表中选择患者时,会执行一个查询,返回用户可以选择分配预约的所有临床医生。问题是有数百名临床医生,而患者通常只能看到相同的 3-4 名临床医生。

我想做的是创建一个查询,该查询会拉出所有临床医生,但首先显示过去曾与特定患者预约过的临床医生,然后再列出所有其他临床医生。

基本上,查询需要检查特定 PatientID 的 Appointments 表,拉出过去与该客户有过约会的所有临床医生,然后在该列表下提取所有未见过该患者的临床医生。

那么我想出的最好的样子是这样的,但我现在真的不知道还有什么可以尝试的。

SELECT Clinician.att_id, Clinician.att_name, 
       Case When Clinician.att_id = Appointments.att_id THEN 1 ELSE 0 END as common 
FROM Clinician inner join 
     Appointments
     on Clinician.att_id = Appointments.att_id
order by common desc;

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    如果您想要所有临床医生,那么您想要left join 或其他一些构造。

    SELECT c.att_id, c.att_name
    FROM Clinician
    ORDER BY (CASE WHEN EXISTS (SELECT 1 
                                FROM Appointments a
                                WHERE c.att_id = a.att_id AND
                                      a.patient_id = @patient_id
                               )
                   THEN 1 ELSE 2
              END)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2020-05-18
      • 1970-01-01
      相关资源
      最近更新 更多