select count(distinct v.vn) 'Total'
,count(distinct if(v.count_in_year=0,v.vn,null)) 'New'
,count(distinct if(s.smoking_type_id is not null,s.vn,null)) 'Smoking'
,count(distinct if(s.smoking_type_id is not null and v.count_in_year=0,s.vn,null)) 'New_Smoking'
,count(distinct if(s.drinking_type_id is not null,s.vn,null)) 'Drinking'
,count(distinct if(s.drinking_type_id is not null and v.count_in_year=0,s.vn,null)) 'New_Drinking'
from vn_stat v
left join opdscreen s on v.vn=s.vn
where v.vstdate between '2012-10-1' and '2012-10-31'
ลองดู