Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带日期要求的Oracle SQL计数_Sql_Oracle - Fatal编程技术网

带日期要求的Oracle SQL计数

带日期要求的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

我有下面列出的两张表。我需要列出医生的详细信息,包括他在过去6个月内看过的病人以及他看过的病人数量

 - 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