2013-11-21 3 views
0

У меня есть 2 таблицы, как показано ниже. Мне нужно перечислить данные врача с пациентом, которого он видел в течение последних 6 месяцев, и количеством пациента, которого он видел.Oracle SQL count с требованием даты

- 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') 

ответ

0

Попробуйте это:

SELECT DrNo, 
     Name, 
     Contact, 
     (SELECT COUNT(*) 
      FROM Patient 
     WHERE Patient.DrNo = Doctor.DrNo 
      AND MONTHS_BETWEEN(sysdate,Patient.datevisit) <= 6) as PatientSeen 
    FROM Doctor 
+0

Работает отлично, спасибо много. Это именно то, что мне нужно. – user2866313

+0

Если это правильно, не могли бы вы принять его как правильный ответ? Благодаря! –

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

Ваш ответ будет работать, но его немного сложнее понять. – user2866313

+0

Я согласен, но предпочтительным является объединение. Это не так сложно. Левое соединение означает соединение на основе внешнего ключа и любая таблица слева будет полностью восстановлена, и только соответствующие записи будут считаться из правой таблицы. – Gayathri

+0

Прочитайте больше об этом, спасибо за помощь в любом случае. – user2866313

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

Это не покажет врачам, которые не видели пациентов. – GriffeyDog

+0

Спасибо @GriffeyDog, обновил его ... – addy2601

Смежные вопросы