แสดงบทความที่มีป้ายกำกับ SQL Query แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ SQL Query แสดงบทความทั้งหมด

วันพฤหัสบดีที่ 25 มกราคม พ.ศ. 2561

เป้าหมาย HPV นักเรียน ป.5 เพศหญิง HOSxP

SQL จำนวนนักเรียน ป.5 เพศ ญ ทั้งหมด
....................................................................

SELECT p.cid,concat(p.pname,p.fname,' ',p.lname) as person_name ,p.sex,p.birthdate,concat(p.age_y,".",p.age_m,".",p.age_d) as age_person ,vsc.village_school_class_name,vs1.school_name,vs.school_room_no FROM person p 
LEFT OUTER JOIN village_student vs ON p.person_id = vs.person_id
LEFT OUTER JOIN village_school_class vsc ON vs.village_school_class_id = vsc.village_school_class_id
LEFT OUTER JOIN village_school vs1 ON vs.village_school_id = vs1.village_school_id
WHERE p.sex='2' AND vs.discharge='N' AND vs.village_school_class_id='8'

..................................................................
ดาว์นโหลดเอกสารที่เกี่ยวข้อง


Cr. ไฟล์เอกสารดาว์นโหลด รพ.สต.บ้านโพธิ์

วันอังคารที่ 18 ตุลาคม พ.ศ. 2559

การใช้คำสั่ง join แสดงข้อมูล จาก 2 ฐานข้อมูล สำหรับ mysql


การใช้คำสั่ง join ของภาษา sql เพื่อแสดงข้อมูลนั้น ถือว่าเป็นคำสั่งที่ช่วยให้นักพัฒนาระบบสามารถเรียบเรียงข้อมูล
จากหลาย ๆ ตารางที่มีความสัมพันธ์กันมาแสดงร่วมกันได้อย่างลงตัวและมีประสิทธิภาพ และช่วยลดการใช้ select ข้อมูล
มาแสดงอย่างซ้ำซ้อนลงไปได้ ปัญหาที่เกิดขึ้นและมีความจำเป็นที่ต้องใช้การ join ข้อมูลจากหลาย ๆ ตารางนั้น
ก็มีมากมายแตกต่างกันไป แต่ปัญหาหนึ่งที่ผู้เขียนจะยกเป็นตัวอย่างในกรณีนี้คือ
การแสดงชื่อพนักงานและนามสกุลพนักงานจากแหล่งฐานข้อมูล 2 แหล่ง
โดยฐานข้อมูลแรกจะเก็บรายชื่อของพนักงาน และฐานข้อมูลตัวที่ 2 จะเก็บนามสกุลของพนักงานเอาไว้
แต่ต้องการทำรายงานที่ต้องแสดงทั้งชื่อและนามสกุลของพนักงานออกมา
อาจจะต้องใช้การ join ข้อมูลจาก 2 ฐานข้อมูลมาช่วยดังนี้
ฐานข้อมูลที่ 1
CREATE DATABASE `db1`
มี 1 ตาราง
CREATE TABLE `tb1` (
`id`  int(1) NULL ,
`name`  varchar(255) NULL ,
PRIMARY KEY (`id`)
)
;
ฐานข้อมูลที่ 2
CREATE DATABASE `db2`
มี 1 ตาราง
CREATE TABLE `tb2` (
`id`  int(1) NULL ,
`surname`  varchar(255) NULL ,
PRIMARY KEY (`id`)
)
;
โดยตาราง tb1 บน db1 และ tb2 บน db2 มีฟิลด์ id เป็นคีย์สำหรับเชื่อมโยงความสัมพันธ์กัน
แสดงข้อมูลใน tb1

แสดงข้อมูลใน tb2

ใช้การแสดงข้อมูลแบบ join ข้อมูลจาก 2 ฐานข้อมูล
SELECT
db1.tb1.`name`,
db2.tb2.surname
FROM
db1.tb1
INNER JOIN db2.tb2 ON db1.tb1.id = db2.tb2.id
แสดงผลข้อมูล

วันพุธที่ 13 มกราคม พ.ศ. 2559

ลบบ้านในบัญชี 1 ไม่ได้ (สาเหตุอาจเกิดจาก มีผู้เสียชีวิตอยู่ในบ้าน)

ลบบ้านในบัญชี 1 ไม่ได้ (สาเหตุอาจเกิดจาก มีผู้เสียชีวิตอยู่ในบ้าน)

วิธีการตรวจสอบ

select * from village
เพื่อตรวจตำบลในเขตรับผิดชอบของเราว่า village_id คืออะไร

select * from house where village_id='1' and address='167'
คำสั่งนี้ให้ใส่บ้านเลขที่ ตรงส่วนของ address และรหัสตำบล ประมวลแล้วเราจะได้รหัสบ้านเลขที่ 167

select * from person where house_id='1521'
คำสั่งนี้ให้เอารหัสบ้านเลขที่มาใส่ จะประมวลผลออกชื่อประชากรที่อยู่ในบ้านเลขที่นั้น

หลังจากนั้นเราก็จะได้ทั้ง pid,cid,ชื่อ-สกุล

วันจันทร์ที่ 11 มกราคม พ.ศ. 2559

ตรวจสอบประชากรที่ "เสียชีวิต" ในบัญชี ๑ แต่สถานะ "ยังไม่จำหน่าย" ในคลินิกพิเศษ

SELECT p.patient_hn,c.hn,p.cid,CONCAT(p.pname,p.fname," ",p.lname)AS peron_name,p.death,p.discharge_date,
pd.person_discharge_name,p.person_discharge_id,c2.name AS clinic_name,cms.clinic_member_status_name,c.discharge,c.dchdate,
c.with_hypertension
FROM clinicmember c
LEFT OUTER JOIN person p ON p.patient_hn = c.hn
LEFT OUTER JOIN clinic_member_status cms ON cms.clinic_member_status_id = c.clinic_member_status_id
LEFT OUTER JOIN village v ON v.village_id = p.village_id
LEFT OUTER JOIN clinic c2 ON c2.clinic = c.clinic
LEFT OUTER JOIN person_discharge pd ON p.person_discharge_id = pd.person_discharge_id
WHERE p.death="Y"
AND c.clinic="002"
AND p.house_regist_type_id IN("1","3")

ตรวจสอบประชากรที่ "เสียชีวิต" ในบัญชี ๑ แต่สถานะ "ยังไม่จำหน่าย" ในคลินิกพิเศษ
-เบาหวาน/ความดัน
-อื่นๆ
เปลี่ยนรหัสคลินิกตามแต่ละโรงพยาบาลเองนะครับ
c.clinic="002"

By : กัมปนาท บุตรจันทร์

แสดงจำนวนผู้รับบริการห้อง X-ray แยกรายวัน

select x.xn,x.hn,x.vn,x.report_date,x.request_date,x.confirm ,xh.department,concat(p.pname,p.fname,' ',p.lname) as ptname ,i.xray_items_name ,
d.name as report_doctor_name , k.department as request_department ,d2.name as request_doctor_name,
xp.priority_name
from xray_report x
left outer join patient p on p.hn = x.hn
left outer join xray_items i on i.xray_items_code = x.xray_items_code
left outer join doctor d on d.code = x.report_doctor
left outer join kskdepartment k on k.depcode = x.request_depcode
left outer join doctor d2 on d2.code = x.request_doctor
left outer join xray_head xh on xh.vn = x.vn
left outer join xray_priority xp on xp.xray_priority_id = x.xray_priority_id
where x.confirm = 'Y' and x.confirm_read_film <> 'Y' and (x.request_date between '2014-08-04' and '2014-08-04' )
order by x.xn

By : สุชาติ เกตุทอง

ตรวจสอบ type area ของประชากรนอกเขตรับผิดชอบ(หมู่0) ไม่เป็น 4

SELECT *
FROM person
WHERE person.village_id="1"
AND person.house_regist_type_id<>"4"

By : กัมปนาท บุตรจันทร์

นับจำนวนเม็ดยาที่สั่งใช้ในปีงบประมาณ แยกรายเดือน

SELECT d.did,d.name AS DRUGNAME,d.strength,d.unitcost,d.unitprice,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 10 THEN o.qty ELSE 0 END) AS m_01,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 11 THEN o.qty ELSE 0 END) AS m_02,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 12 THEN o.qty ELSE 0 END) AS m_03,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 01 THEN o.qty ELSE 0 END) AS m_04,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 02 THEN o.qty ELSE 0 END) AS m_05,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 03 THEN o.qty ELSE 0 END) AS m_06,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 04 THEN o.qty ELSE 0 END) AS m_07,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 05 THEN o.qty ELSE 0 END) AS m_08,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 06 THEN o.qty ELSE 0 END) AS m_09,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 07 THEN o.qty ELSE 0 END) AS m_10,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 08 THEN o.qty ELSE 0 END) AS m_11,
SUM(CASE WHEN SUBSTR(o.vstdate,6,2) = 09 THEN o.qty ELSE 0 END) AS m_12
FROM drugitems d
LEFT OUTER JOIN opitemrece o ON o.icode = d.icode

นับจำนวนเม็ดยาที่สั่งใช้ในปีงบประมาณ แยกรายเดือน ถ้าหากต้องการดูจำนวนเม็ดที่สั่งใช้ในยาแต่ละตัว ให้เพิ่มเงื่อนไข เป็น
WHERE d.did="100736000004320120381555"

By : กัมปนาท บุตรจันทร์

Script ส่งออกข้อมูลโรคเรื้อรัง(Chronic) สำหรับ HOSxP

SELECT
(SELECT hospitalcode FROM opdconfig) AS HOSPCODE,
ps.person_id AS PID,
IF(c.regdate IS NULL OR TRIM(c.regdate)='' OR c.regdate LIKE '0000-00-00%','',DATE_FORMAT(c.regdate,'%Y%m%d')) AS DATE_DIAG,
'' AS CHRONIC,
'' AS HOSP_DX,
'' AS HOSP_RX,
IF(c.dchdate IS NULL OR TRIM(c.dchdate)='' OR c.dchdate LIKE '0000-00-00%','',DATE_FORMAT(c.dchdate,'%Y%m%d')) AS DATE_DISCH,
c.clinic_member_status_id AS TYPEDISCH,
IF(c.lastupdate IS NULL OR TRIM(c.lastupdate)='' OR c.lastupdate LIKE '0000-00-00%','',DATE_FORMAT(c.lastupdate,'%Y%m%d%H%i%s') ) AS D_UPDATE,
p.cid AS CID
FROM clinicmember c
LEFT OUTER JOIN clinic n ON c.clinic = n.clinic AND n.chronic = 'Y'
LEFT OUTER JOIN clinic_persist_icd cc ON c.hn=c.hn AND cc.dxtype = 1
LEFT OUTER JOIN clinic_member_status cm ON cm.clinic_member_status_id = c.clinic_member_status_id
LEFT OUTER JOIN patient p ON p.hn = c.hn
LEFT OUTER JOIN person ps ON c.hn=ps.patient_hn AND p.cid = ps.cid
LEFT OUTER JOIN opduser u ON u.loginname = c.modify_staff
LEFT OUTER JOIN ovst ov1 ON ov1.vn = c.last_cormobidity_screen_vn
ORDER BY c.pt_number,c.regdate

By : สุชาติ เกตุทอง

คำสั่งตรวจสอบรายงานการคัดกรอง และโรค ปี 2558

คำสั่งตรวจสอบรายงานการคัดกรอง และโรค ปี 2558

ขั้นตอนการดูรายงาน ให้ก๊อปคำสั่งไปวางใน sql query แล้วคลิก run


รายชื่อประชากร ที่อาจกรอกช้ำ ในงานคัดกรอง และ โรค ปี 2558
SELECT person.person_id,CONCAT(person.pname, person.fname," ",person.lname) AS `name`,
person.cid,ovstdiag.hn,ovstdiag.icd10,ovstdiag.vstdate,count(ovstdiag.hn)as ovstdiag2
FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z133" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY person.person_id HAVING ovstdiag2 >= 2
union
SELECT person.person_id,CONCAT(person.pname, person.fname," ",person.lname) AS `name`,
person.cid,ovstdiag.hn,ovstdiag.icd10,ovstdiag.vstdate,count(ovstdiag.hn)as ovstdiag2
FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z123" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY person.person_id HAVING ovstdiag2 >= 2
union
SELECT person.person_id,CONCAT(person.pname, person.fname," ",person.lname) AS `name`,
person.cid,ovstdiag.hn,ovstdiag.icd10,ovstdiag.vstdate,count(ovstdiag.hn)as ovstdiag2
FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z014" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY person.person_id HAVING ovstdiag2 >= 2
union
SELECT person.person_id,CONCAT(person.pname, person.fname," ",person.lname) AS `name`,
person.cid,ovstdiag.hn,ovstdiag.icd10,ovstdiag.vstdate,count(ovstdiag.hn)as ovstdiag2
FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z124" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY person.person_id HAVING ovstdiag2 >= 2
union
SELECT person.person_id,CONCAT(person.pname, person.fname," ",person.lname) AS `name`,
person.cid,ovstdiag.hn,ovstdiag.icd10,ovstdiag.vstdate,count(ovstdiag.hn)as ovstdiag2
FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z131" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY person.person_id HAVING ovstdiag2 >= 2
union
SELECT person.person_id,CONCAT(person.pname, person.fname," ",person.lname) AS `name`,
person.cid,ovstdiag.hn,ovstdiag.icd10,ovstdiag.vstdate,count(ovstdiag.hn)as ovstdiag2
FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z138" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY person.person_id HAVING ovstdiag2 >= 2

ผลงานโรค และการคัดกรอง ปี 2558

SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z001" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag.icd10
union
SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z012" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag.icd10
union
SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z108" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag.icd10
union
SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z133" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag.icd10
union
SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z123" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag.icd10
union
SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z014" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag.icd10
union
SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z124" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag.icd10
union
SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z131" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag .icd10
union
SELECT ovstdiag.icd10, count(person.sex)as total FROM ovstdiag INNER JOIN person ON person.patient_hn = ovstdiag.hn
WHERE ovstdiag.icd10 LIKE "Z138" AND ovstdiag.vstdate BETWEEN "2014-10-01" and "2015-06-30"
GROUP BY ovstdiag.icd10

cr.ชีวิต ต้องสู้

วันอาทิตย์ที่ 10 มกราคม พ.ศ. 2559

ตั้งค่า hosxp ปีใหม่ (i_refer_number+o_refer_number)

ตั้งค่า hosxp ปีใหม่ (i_refer_number+o_refer_number)

select * from serial
where name like ‘HN’ or name like ‘AN’ or name like ‘%refer_num%’ or name like ‘%xn-%’

Credit By Jpsurin

บริการทันตกรรม แยกผู้รับบริการ

select m.doctor,d.name,t.code,t.name,m.vn,m.hn,count(m.vn) as vn_count ,sum(m.tcount) as t_count , sum(m.scount) as s_count from dttm t left outer join dtmain m on m.tmcode=t.code and m.vstdate between ‘2015-10-01’ and ‘2015-10-01’ left join doctor d on d.code=m.doctor group by m.doctor,m.vn,m.hn,t.code,t.name

Credit by Jpsurin