【问题标题】:Joins and grouping issue加入和分组问题
【发布时间】:2016-08-03 09:03:56
【问题描述】:

我的医院数据库中有四个表。我需要显示所有患者的姓名,对于每个患者,他们不止一次拜访过的医生的姓名,以及拜访这些医生的次数。如果患者没有看过任何医生,或者没有多次看过任何医生,管理层不希望在列表中看到他们。编写一个查询来检索该信息以供管理层使用。

 Select * from Medical_History;
 Select * from Physician;
 Select * from Appointment;
 Select * from Patient;

我已经进行了联接查询以及组查询,但我不知道如何组合它们。因为我收到分组错误。因为我需要显示患者去看医生的次数,而且必须不止一次。所以需要帮助。这是 join 和 group 子句:

  Select Patient_First_Name,    Patient_Last_Name,Physician_First_Name,Physician_Last_Name
         from Patient Join Medical_History on   Patient.Patient_ID=Medical_History.Patient_ID
        Join Physician on Medical_History.Physician_ID=Physician.Physician_ID;

        select Physician_ID, count(Patient_ID)
        from Medical_History
        Group by Physician_ID, Patient_ID;

【问题讨论】:

  • 请查看此链接以了解如何改进问题..spaghettidba.com/2015/04/24/…
  • 您可以按患者 ID、患者姓名、医师、医师姓名进行分组 - 在您的选择中,您需要将 count() 作为 'numberOfTimesPatentSawConsultant' 并且您需要进行有计数 () > 1

标签: sql sql-server


【解决方案1】:

您可以先使用 GROUP BYHAVING 来获取患者和医生的关联,然后加入他们的每个主表以获取他们的姓名。

类似这样的:

SELECT 
  Patient_First_Name,
  Patient_Last_Name,
  Physician_First_Name,
  Physician_Last_Name,
  TotalVisits
FROM Patient P
INNER JOIN 
(
    SELECT Patient_ID, Physician_ID, COUNT(*) as TotalVisits
    FROM Medical_History
    GROUP BY Physician_ID, Patient_ID
    HAVING COUNT(*) >= 2
) PP ON P.Patient_ID = PP.Patient_ID
INNER JOIN Physician PH ON PH.Physician_ID = PP.Physician_ID;

【讨论】:

    【解决方案2】:

    我会对每个Patient 记录进行CROSS APPLY 计算,如下所示:

    SELECT Patient_First_Name, Patient_Last_Name,Physician_First_Name,Physician_Last_Name
    FROM Patient
    CROSS APPLY (SELECT Physician_First_Name,Physician_Last_Name,COUNT(*) TotalVisits
                 FROM Medical_History
                 JOIN Physician on Medical_History.Physician_ID=Physician.Physician_ID
                 WHERE Medical_History.Patient_ID=Patient.Patient_ID
                 GROUP BY Physician_First_Name,Physician_Last_Name
                 HAVING COUNT(*)>1) T
    

    内部查询选择与Patient 有多个关联的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 2012-08-15
      • 2020-08-04
      • 2011-09-17
      • 2021-12-31
      相关资源
      最近更新 更多