Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:首先拉取与另一个表中的值匹配的值_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL:首先拉取与另一个表中的值匹配的值

SQL:首先拉取与另一个表中的值匹配的值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我已经为工作创建了一个调度应用程序,我遇到了一个问题,我花了很多天的时间试图解决这个问题,但运气不佳。该应用程序从数据库中提取信息,其中包括患者表、临床医生表和预约表 当前,当用户从应用程序中的下拉列表中选择患者时,将执行一个查询,返回用户可以选择将预约分配给的所有临床医生。问题是有数百名临床医生,而患者通常只看相同的3-4名临床医生 我想做的是创建一个查询,该查询将所有临床医生都拉出来,但首先显示那些在过去与特定患者预约过的临床医生,然后列出所有其他临床医生 基本上,查询需要检查特定患者的预约

我已经为工作创建了一个调度应用程序,我遇到了一个问题,我花了很多天的时间试图解决这个问题,但运气不佳。该应用程序从数据库中提取信息,其中包括患者表、临床医生表和预约表

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

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

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

然后我想出了最好的办法,看起来像这样,但我真的不知道在这一点上还有什么可以尝试的

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;
如果你想要所有的临床医生,那么你需要一个左连接或其他构造

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)