2016-08-03 2 views
0

내 병원 데이터베이스에 4 개의 테이블이 있습니다. 모든 환자의 이름과 각 환자의 방문 인원수를 한 번 이상 방문한 의사의 이름을 각 환자에게 표시해야합니다. 환자가 의사를 방문하지 않았거나 의사를 두 번 이상 방문하지 않은 경우, 관리는 목록에서 환자를보고 싶지 않습니다. 관리를 위해이 정보를 검색하는 단일 쿼리를 작성하십시오. 조인 및 그룹 문제

enter image description here

내가 쿼리뿐만 아니라 그룹 쿼리에 가입 만들었하지만 난 그들을 결합하는 방법을 잘 모릅니다

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

. 그룹화 오류가 발생하기 때문에. 환자의 방문 횟수를 의사에게 보여줘야하기 때문에 환자는 여러 명 이상이어야합니다. 그래서 도움이 필요합니다. 여기에 가입하고 그룹 절입니다 :

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

환자 이름, phyician, physicianname으로 그룹화 할 수 있습니다 - 선택시 'numberOfTimesPatentSawConsultant'로 계산 (*)해야하고 Having Count (*)> 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 더 이상의 관계를 가진 레코드를 선택.