query OPD

OPD : DM จอประสาทตา (มี 2 diag)

SET @start_date = '2022-10-01';
SET @end_date = '2023-09-30';
SET @pdx = 'E110';
 
SELECT
@pdx AS 'PDX',
YEAR(@end_date) AS 'Year',
pt.hn,
pt.pname,
pt.fname,
pt.lname,
CASE pt.sex WHEN '1' THEN 'ชาย' WHEN '2' THEN 'หญิง' ELSE '' END AS 'เพศ',
IFNULL(pt.addrpart, '') AS 'บ้านเลขที่',
IFNULL(pt.moopart, '') AS 'หมู่ที่',
IFNULL(t3.name, '') AS 'ตำบล',
IFNULL(t2.name, '') AS 'อำเภอ',
IFNULL(t1.name, '') AS 'จังหวัด'
 
from clinicmember cm
JOIN patient pt ON pt.hn = cm.hn
LEFT JOIN thaiaddress t1 ON t1.chwpart = pt.chwpart AND t1.amppart = '00' AND t1.tmbpart = '00'
LEFT JOIN thaiaddress t2 ON t2.chwpart = pt.chwpart AND t2.amppart = pt.amppart AND t2.tmbpart = '00'
LEFT JOIN thaiaddress t3 ON t3.chwpart = pt.chwpart AND t3.amppart = pt.amppart AND t3.tmbpart = pt.tmbpart
 
WHERE cm.regdate BETWEEN @start_date AND @end_date
AND cm.clinic = '001'
AND t3.name = 'น้ำพอง'
AND cm.hn IN
(
SELECT
v.hn
FROM ovst v
JOIN ovstdiag dx ON dx.vn = v.vn AND dx.diagtype IN ('1','2')
WHERE
dx.icd10 = @pdx
AND v.vstdate BETWEEN @start_date AND @end_date
GROUP BY v.hn
)
 
ORDER BY CAST(pt.moopart AS UNSIGNED)

ดึงจาก diag หลัก และแสดง diag ร่วมทั้งหมด (opd)

SELECT
ovst.hn,
ovst.vn,
pt.pname,
pt.fname,
pt.lname,
CONCAT(
IFNULL(pt.addrpart, ''),
' ', IFNULL(pt.moopart, ''),
' ', IFNULL(t3.name, ''),
' ', IFNULL(t2.name, ''),
' ', IFNULL(t1.name, '')
) AS fulladdressname,
ovst.vstdate,
dx.icd10 AS main_diag, -- 1. แสดงคอลัมน์ diag หลัก
GROUP_CONCAT(DISTINCT dx_all.icd10 ORDER BY dx_all.icd10 SEPARATOR ', ') AS other_diagnoses -- 2. เปลี่ยนชื่อคอลัมน์เพื่อความชัดเจน
FROM
ovst
JOIN patient pt ON pt.hn = ovst.hn
-- Join สำหรับหา visit ที่มี diag หลัก
JOIN ovstdiag dx ON dx.vn = ovst.vn
-- 3. Join เพื่อหาโรคอื่นๆ ที่ "ไม่ใช่" โรคหลัก
LEFT JOIN ovstdiag dx_all ON dx_all.vn = ovst.vn AND dx_all.icd10 <> dx.icd10
-- Joins สำหรับที่อยู่
LEFT JOIN thaiaddress t1 ON t1.chwpart = pt.chwpart AND t1.amppart = '00' AND t1.tmbpart = '00'
LEFT JOIN thaiaddress t2 ON t2.chwpart = pt.chwpart AND t2.amppart = pt.amppart AND t2.tmbpart = '00'
LEFT JOIN thaiaddress t3 ON t3.chwpart = pt.chwpart AND t3.amppart = pt.amppart AND t3.tmbpart = pt.tmbpart
WHERE
ovst.vstdate BETWEEN '2024-10-01' AND '2025-09-30'
AND dx.icd10 = 'T793' -- กำหนดให้ dx เป็น diag หลัก
GROUP BY
ovst.hn,
ovst.vn,
pt.pname,
pt.fname,
pt.lname,
fulladdressname,
ovst.vstdate,
main_diag; -- 4. เพิ่ม main_diag ใน GROUP BY ด้วย