0

tbldoctor と tblschedule の 2 つのテーブルがあります。

tbldoctor

 doc_id(PK)    docMrId        docfname
      1          22             manish
      2          23             rahul
      3          22             ashish
      4          24             ahemad
      5          22             narendra
      6          22             akshat

スケジュール

  doctor_id(FK)    mr_id       schedule_date
     1              22          2012-06-12
     1              22          2012-06-13
     3              22          2012-06-14
     3              22          2012-06-14
     4              24          2012-06-12
     4              24          2012-06-12
     5              22          2012-06-14
     5              22          2012-06-15
     5              22          2012-06-12

私が欲しいのは、すべてのドクター ID のリストと、tblschedule テーブルで繰り返される特定の医師の数です。

出力は次のようになります

  doc_id         docfname      count
    1               manish       2
    3               rahul        2
    5               narendra     3
    6               akshat       0
4

4 に答える 4

2
select d.doc_id, docfname, count(mr_id) as count
from tbldoctor d
left outer join tblschedule s on s.doctor_id = d.doc_id
where mr_id = 22 
and schedule_date between '2012-06-01' and '2012-06-31'
group by s.doctor_id

編集

select d.doc_id, 
       docfname, 
       sum(case when mr_id = 22 
                then 1 
                else 0 
           end) as count
from tbldoctor d
left outer join tblschedule s on s.doctor_id = d.doc_id
and schedule_date between '2012-06-01' and '2012-06-31'
group by s.doctor_id

SQLFiddle の例

編集 2

どうですか

select d.doc_id, docfname, count(mr_id) as count
from tbldoctor d
left outer join tblschedule s on s.doctor_id = d.doc_id and mr_id = docmrid
where docmrid = 22 
and (schedule_date between '2012-06-01' and '2012-06-31' or mr_id is null)
group by s.doctor_id
order by d.doc_id

SQLFiddle の例

于 2012-06-27T05:14:55.737 に答える
1

100% 理解しているとは言えませんが、これにより、すべての医師 ID のリストと、指定された 2 つの日付の間のそれぞれのスケジュール項目の数が表示されます。

SELECT tbldoctor.doc_id, COUNT(*) cnt
FROM tbldoctor d INNER JOIN tblschedule s
    ON d.doc_id = s.doctor_id
WHERE s.schedule_date BETWEEN '2012-06-12' AND '2012-06-15'
GROUP BY tbldoctor.doc_id
于 2012-06-27T05:14:57.867 に答える
0
SELECT * FROM `tbldoctor` JOIN `tblschedule` ON `tblschedule`.doctor_id(FK) = `tbldoctor`.doc_id(PK)
于 2012-06-27T05:16:10.073 に答える
0
SELECT tbldoctor.doc_id, COUNT(*) cnt FROM tbldoctor d INNER JOIN tblschedule s     ON d.doc_id = s.doctor_id WHERE s.schedule_date BETWEEN '2012-06-12' AND '2012-06-15' GROUP BY tbldoctor.doc_id
于 2012-06-27T05:45:17.753 に答える