A =  ผู้สูงอายุ >= 60  ที่มารับบริการ ถูกต้องครับ ถูกหลักอนามัย อิอิ=================================================================
B = ผู้ป่วย NCD  ได้แก่  คลินิกเบาหวาน,ความดัน,หอบหืด,ไต,หัวใจ  ทั้งหมดกี่คนทุกอายุ
     โค้ดคือ      
      select count(distinct(vn.hn)) 
      from depression_screen d1  
      left outer join depression_screen_evaluate d2 on d2.depression_screen_evaluate_id = d1.depression_screen_evaluate_id   
      left outer join suicide_screen_evaluate d3 on d3.suicide_screen_evaluate_id = d1.suicide_screen_evaluate_id            
      left outer join vn_stat vn on vn.vn = d1.vn       
      left outer join person p1 on p1.patient_hn=vn.hn    
     left outer join house h1 on h1.house_id=p1.house_id   
     left outer join village v1 on v1.village_id=h1.village_id 
      left outer join thaiaddress t1 on t1.addressid=v1.address_id  
     left outer join patient p on p.hn=vn.hn                        
    LEFT OUTER JOIN clinicmember c ON p.hn=c.hn                 
    where vn.vstdate  between "'+d1+'" and "'+d2+'" and c.clinic in("1","10","2","9","13") 
ถ้าจะให้ดี เรียงลำดับตารางใหม่จะดีมากครับ ตัวเราเองจะไล่โค้ดได้ง่ายด้วย ลำดับความสำคัญของตาราง ตารางไหนไม่ได้ใช้ก็ไม่ต้องเอามา JOIN ครับ ถ้าจะนับแค่คน
ตารางพวก house village thaiaddress  patient  person suicide_screen_evaluate depression_screen_evaluate depression_screen ก็ไม่ต้องเอามารกตา=================================================================
C = ผู้มารับบริการตั้งแต่ อายุ 60 ปีขึ้นไป ได้รับการคัดกรองภาวะซึมเศร้า 9Q มีกี่คน
    โค้ดคือ
     select count(distinct(vn.hn))
     from vn_stat vn                                               
     left outer join depression_screen d1 ON vn.vn=d1.vn            
     left outer join depression_screen_evaluate d2 on d2.depression_screen_evaluate_id = d1.depression_screen_evaluate_id  
     left outer join suicide_screen_evaluate d3 on d3.suicide_screen_evaluate_id = d1.suicide_screen_evaluate_id            
     left outer join patient p ON p.hn=vn.hn                        
     where vn.vstdate between "'+d1+'" and "'+d2+'" and vn.age_y>=60 
 แค่นี้น่าจะพอครับ
      SELECT count(distinct(vn.hn)) 
      FROM vn_stat vn       
      LEFT OUTER JOIN clinicmember c ON p.hn=c.hn                 
      WHERE vn.vstdate  BETWEEN "'+d1+'" AND "'+d2+'" 
      AND c.clinic in("1","10","2","9","13") 
=================================================================
D = ผู้ป่วย NCD  ได้แก่  คลินิกเบาหวาน,ความดัน,หอบหืด,ไต,หัวใจ  ทั้งหมดที่ได้รับการคัดกรองภาวะซึมเศร้า 9Q มีกี่คน
    โค้ดคือ
     select count(distinct(vn.hn))
     from depression_screen d1 
     LEFT OUTER JOIN depression_screen_evaluate d2 ON d2.depression_screen_evaluate_id = d1.depression_screen_evaluate_id   
     LEFT OUTER JOIN suicide_screen_evaluate d3 ON d3.suicide_screen_evaluate_id = d1.suicide_screen_evaluate_id            
     LEFT OUTER JOIN vn_stat vn ON vn.vn = d1.vn        
     LEFT OUTER JOIN person p1 ON p1.patient_hn=vn.hn    
     LEFT OUTER JOIN house h1 ON h1.house_id=p1.house_id   
     LEFT OUTER JOIN village v1ON v1.village_id=h1.village_id  
     LEFT OUTER JOIN thaiaddress t1 ON t1.addressid=v1.address_id 
    LEFT OUTER JOIN patient p ON p.hn=vn.hn                       
    LEFT OUTER JOIN clinicmember c ON p.hn=c.hn                  
    where vn.vstdate  between "'+d1+'" and "'+d2+'" and c.clinic in("1","10","2","9","13")
เรียงลับดับตารางจะดีกว่านี้ครับ เข้าใจง่าย ถูกหลักอนามัยด้วยครับ อิอิ
==================================================================
E =  ผู้มารับบริการตั้งแต่ อายุ 60 ปีขึ้นไป  ที่มีผลการคัดกรอง >= 7  มีกี่คน
    โค้ดคือ
     select count(distinct(vn.hn))   
     from vn_stat vn                                             
     left outer join depression_screen d1 ON vn.vn=d1.vn         
     left outer join depression_screen_evaluate d2 on d2.depression_screen_evaluate_id = d1.depression_screen_evaluate_id  
     left outer join suicide_screen_evaluate d3 on d3.suicide_screen_evaluate_id = d1.suicide_screen_evaluate_id          
     left outer join patient p ON p.hn=vn.hn                       
     where vn.vstdate between "'+d1+'" and "'+d2+'" and vn.age_y>=60 and d1.depression_score>=7
พอได้คัรบ
==================================================================
F =  ผู้ป่วย NCD  ได้แก่  คลินิกเบาหวาน,ความดัน,หอบหืด,ไต,หัวใจ  ทั้งหมดที่มีผลการคัดกรอง >= 7  มีกี่คน
   โค้ดคือ
      select count(distinct(vn.hn)) 
    from depression_screen d1
    left outer join depression_screen_evaluate d2 on d2.depression_screen_evaluate_id = d1.depression_screen_evaluate_id  
    left outer join suicide_screen_evaluate d3 on d3.suicide_screen_evaluate_id = d1.suicide_screen_evaluate_id             
    left outer join vn_stat vn on vn.vn = d1.vn      
    left outer join person p1 on p1.patient_hn=vn.hn   
    left outer join house h1 on h1.house_id=p1.house_id   
     left outer join village v1 on v1.village_id=h1.village_id  
    left outer join thaiaddress t1 on t1.addressid=v1.address_id   
    left outer join patient p ON p.hn=vn.hn                        
    LEFT OUTER JOIN clinicmember c ON p.hn=c.hn                   
    where vn.vstdate  between "'+d1+'" and "'+d2+'" and c.clinic in("1","10","2","9","13") and d1.depression_score>=7
เรียงลับดับตารางจะดีกว่านี้ครับ เข้าใจง่าย ถูกหลักอนามัยด้วยครับ อิอิ
==================================================================