带日期要求的Oracle SQL计数
我有下面列出的两张表。我需要列出医生的详细信息,包括他在过去6个月内看过的病人以及他看过的病人数量带日期要求的Oracle SQL计数,sql,oracle,Sql,Oracle,我有下面列出的两张表。我需要列出医生的详细信息,包括他在过去6个月内看过的病人以及他看过的病人数量 - Patient PatientNo | Name | Address | DrNo (FK) | Datevisit - Doctor DrNo | Name | Contact 我的最终输出应该如下 DrNo | Name | Contact | PatientSeen 我的编码肯定是错误的,希望能得到一些帮助,对sql来说是全新的 select *, count(select
- Patient
PatientNo | Name | Address | DrNo (FK) | Datevisit
- Doctor
DrNo | Name | Contact
我的最终输出应该如下
DrNo | Name | Contact | PatientSeen
我的编码肯定是错误的,希望能得到一些帮助,对sql来说是全新的
select *, count(select * from patient where drno is not null)
from doctor, patient
where doctor.drno = patient.drno
and trunc(patient.datevisit,'MM') >= trunc(add_months(sysdate,-6), 'MM')
试试这个:
SELECT DrNo,
Name,
Contact,
(SELECT COUNT(*)
FROM Patient
WHERE Patient.DrNo = Doctor.DrNo
AND MONTHS_BETWEEN(sysdate,Patient.datevisit) <= 6) as PatientSeen
FROM Doctor
你的答案也会有用,但对我来说理解起来有点困难。我同意,但加入是首选方法。没那么难。Left join表示基于外键的联接,将完全检索左侧的表,并且只考虑右侧表中的匹配项。您需要根据所选医生表中的所有字段进行分组。您在您的组中缺少姓名和联系人。如果是正确的,您能接受它作为正确答案吗?谢谢
select d.DrNo,d.Name,d.Contact,count(p.PatientNo)
from Doctor d left join Patient p on p.DrNo =d.DrNo
where MONTHS_BETWEEN(sysdate,p.Patient.datevisit) <= 6
group by d.DrNo,d.Name,d.Contact
SELECT D.DrNo, D.Name, D.Contact, COUNT(P.PatientNo) AS PatientSeen
FROM DOCTOR D
LEFT JOIN PATIENT P ON D.DrNo = P.DrNo
WHERE P.Datevisit > ADD_MONTHS(sysdate, -6)
GROUP BY D.DrNo, D.Name, D.Contact