2016-08-03 18 views
0

病院データベースに4つのテーブルがあります。私は、すべての患者の名前、そして各患者について、これらの医師への訪問回数とともに、複数回訪れた医師の名前を表示する必要があります。患者が医師を訪れていない場合、または医師を2回以上訪問しなかった場合、経営陣はリスト内でそれを見たいとは思わない。管理のためにこの情報を取得する単一のクエリを記述します。結合とグループ化の問題

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

enter image description here

私は、クエリだけでなく、グループクエリに参加してきたが、私はそれらを結合する方法を知りません。グループ化エラーが発生しているためです。私は患者の訪問回数を医者に示す必要があり、それは複数でなければなりません。だから助けが必要です。ここに参加し、グループ句です:

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; 
+1

質問を改善する方法については、このリンクをご確認ください.https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

+0

フィジックナンバー、フィジシャン、physiciannameでグループ化することができます - あなたの選択では、 'numberOfTimesPatentSawConsultant'としてカウント(*)が必要です。あなたはハーブカウント(*)> 1 – Cato

答えて

1

あなたが最初の患者と医師の関連付けを取得するためにHAVINGGROUP BYを使用して、自分の名前を取得するために彼らのマスターテーブルのそれぞれに参加することができます。

このような何か:

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; 
0

私は以下のような各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に複数の関連を持つレコードを選択します。