【问题标题】:How to merge two join queries如何合并两个连接查询
【发布时间】:2017-01-05 18:07:59
【问题描述】:

我需要显示每个部门的所有工作人员、医生和患者的人数..

我已经尝试过这个查询来显示没有工作人员、医生并且它工作正常

ALTER view vwDisplay
AS
    select 
        dpt.Department_ID, dpt.Department_Name,
        num_of_doc, num_of_staff, No_of_Patient
    from 
        Department dpt
    join 
        (select 
             count(*) as num_of_doc, Department_ID 
         from 
             Doctor_Main 
         group by 
             Department_ID) dct on dpt.Department_ID = dct.Department_ID
    join 
        (select 
             count(*) as num_of_staff, Department_ID 
         from 
             Other_Staff 
         group by
             Department_ID) stf on stf.Department_ID = dpt.Department_ID

而且我还需要显示每个部门的患者人数。但是科室和病人没有关系,医生只为一个科室工作。

这个查询我用来显示每个医生的病人数

select count(*) as No_of_Patient, Doctor_Main.Doctor_ID
from Patients_Main
inner join Doctor_Main on Patients_Main.Doctor_ID = Doctor_Main.Doctor_ID
group by Doctor_Main.Doctor_ID

现在我需要合并这两个,当我按如下方式执行这个查询时

ALTER view vwDisplay
as
select dpt.Department_ID,dpt.Department_Name,num_of_doc,num_of_staff,No_of_Patient
from Department dpt
    join (select count(*) as num_of_doc,Department_ID from Doctor_Main GROUP  BY Department_ID) dct
    on dpt.Department_ID = dct.Department_ID

    join (select count(*) as num_of_staff,Department_ID from Other_Staff GROUP  BY Department_ID) stf
    on stf.Department_ID = dpt.Department_ID

    --join (select count(*) as No_of_Patient,Doctor_ID from Patients_Main GROUP  BY Doctor_ID) dcth
    --on dcth.Doctor_ID = Doctor_Main.Doctor_ID


    select count(*) as No_of_Patient,Doctor_Main.Doctor_ID
    from Patients_Main
    inner join Doctor_Main on Patients_Main.Doctor_ID = Doctor_Main.Doctor_ID
    group by Doctor_Main.Doctor_ID

出现此错误:

关键字“select”附近的语法不正确。

我可以为这个问题做些什么?或者您有其他解决方案吗?

【问题讨论】:

  • 视图仍然是一个关系对象,它有定义类型的行和列。
  • 您在Doctors_Main 上有Department_ID,因此您应该能够按部门分组并获取患者人数。取消注释以获取患者计数的联接,但不是 Doctor_ID,而是按 Department_ID 分组。在内部选择中,加入Doctors_Main得到Department_ID
  • @WEI_DBA 你能给我示例代码吗?因为我对此感到困惑

标签: sql-server join merge


【解决方案1】:

我想你可以试试这个。

ALTER view vwDisplay
as
select dpt.Department_ID,dpt.Department_Name,num_of_doc,num_of_staff,No_of_Patient
from Department dpt
    join (select count(*) as num_of_doc,Department_ID from Doctor_Main GROUP  BY Department_ID) dct
    on dpt.Department_ID = dct.Department_ID

    join (select count(*) as num_of_staff,Department_ID from Other_Staff GROUP  BY Department_ID) stf
    on stf.Department_ID = dpt.Department_ID

    join (select count(*) as No_of_Patient,DM.Department_ID from Patients_Main PM
          join Doctors_Main DM ON PM.Doctor_ID = DM.Doctor_ID GROUP  BY DM.Department_ID) dcth
    on dcth.Department_ID = dpt.Department_ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2023-03-28
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多