[ Moderator Control Panel ]
เรื่องรายงาน SQL command แลกเปลี่ยน รายงาน
Moderator: zatanofmonk, julaluk, thiwatip, bigdevil88
โดย pakee_06 » ศุกร์ 16 มี.ค. 2012 3:08 pm
เป็น Function สำหรับ Postgres version 8.4 นะคะ ของ 8.0 ไม่แน่ใจว่าใช้ได้หรือเปล่า ^^ (พี่ๆ ลองดูนะคะ)
คำสั่งนี้ คือ array_to_string และ array_agg เป็นฟังก์ชันที่เอาค่าที่ถูก group มาต่อกัน ผลลัพธ์ที่ได้ จะได้ดังรูปนะคะ

รายละเอียดเพิ่มเติมอ่านได้จาก
http://www.postgresql.org/docs/8.4/static/functions-array.htmlhttp://www.postgresql.org/docs/8.4/static/functions-aggregate.htmlตัวอย่างนำคำสั่งไปใช้ในรายงาน- โค้ด: เลือกทั้งหมด
SELECT distinct
b_site.b_visit_office_id as PCUCODE
,t_health_family.health_family_hn_hcis as PID
,t_visit.visit_vn as SEQ
,visit_primary_symptom_main_symptom as อาการสำคัญ
,visit_primary_symptom_current_illness as อาการปัจจุบัน
,CASE WHEN q2.physical_exam is not null
THEN q2.physical_exam
ELSE 'ไม่ตรวจ' END as PHYSICAL_EXAM
,CASE WHEN t_diag_icd10.f_diag_icd10_type_id is not null
THEN doc_diag.employee_firstname || ' ' || doc_diag.employee_lastname
ELSE q3.employee_firstname || ' ' || q3.employee_lastname END as DOCTOR
,substr(q1.visit_vital_sign_blood_presure,1,position('/'
in q1.visit_vital_sign_blood_presure)-1) as SBP
,substr(q1.visit_vital_sign_blood_presure,position('/'
in q1.visit_vital_sign_blood_presure)+1,(length(
q1.visit_vital_sign_blood_presure)-position('/'
in q1.visit_vital_sign_blood_presure))) as DBP
,q1.visit_vital_sign_temperature as TEMP
,q1.visit_vital_sign_weight as WEIGHT
,q1.visit_vital_sign_height as HEIGHT
,CASE WHEN q1.visit_vital_sign_waistline =''
THEN '0'
ELSE round(cast(q1.visit_vital_sign_waistline as numeric)) END as WAIST_CM
,q1.visit_vital_sign_hips as HIP_CM
,q1.visit_vital_sign_heart_rate as PULSE
,q1.visit_vital_sign_respiratory_rate as RESPIRATION
,CASE WHEN length(t_visit.visit_begin_visit_time)>18
THEN (to_number(substring(t_visit.visit_begin_visit_time,1,4),'9999')-543 )
|| substring(t_visit.visit_begin_visit_time,6,2)
|| substring(t_visit.visit_begin_visit_time,9,2)
|| substring(t_visit.visit_begin_visit_time,12,2)
|| substring(t_visit.visit_begin_visit_time,15,2)
|| substring(t_visit.visit_begin_visit_time,18,2)
ELSE '' END AS D_UPDATE
FROM
t_patient INNER JOIN t_visit on t_patient.t_patient_id = t_visit.t_patient_id
INNER JOIN t_health_family on t_patient.t_health_family_id = t_health_family.t_health_family_id
LEFT JOIN (SELECT t_visit_primary_symptom.t_visit_id as t_visit_id
,array_to_string(array_agg(visit_primary_symptom_main_symptom),',') as visit_primary_symptom_main_symptom
,array_to_string(array_agg(visit_primary_symptom_current_illness),',') as visit_primary_symptom_current_illness
FROM t_visit INNER JOIN t_visit_primary_symptom on t_visit_primary_symptom.t_visit_id = t_visit.t_visit_id
where visit_primary_symptom_active = '1' and substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
AND substring(t_visit.visit_begin_visit_time,1,10) <= '2554-01-05'
GROUP BY t_visit_primary_symptom.t_visit_id) as q0
on q0.t_visit_id = t_visit.t_visit_id
LEFT JOIN t_visit_service on t_visit_service.t_visit_id = t_visit.t_visit_id
LEFT JOIN t_visit_vital_sign on (t_visit_vital_sign.t_visit_id = t_visit.t_visit_id)
INNER JOIN t_diag_icd10 ON (t_visit.t_visit_id = t_diag_icd10.diag_icd10_vn and t_diag_icd10.diag_icd10_active = '1')
INNER JOIN b_visit_clinic ON (t_diag_icd10.b_visit_clinic_id = b_visit_clinic.b_visit_clinic_id)
INNER JOIN b_employee doc_diag on doc_diag.b_employee_id = t_diag_icd10.diag_icd10_staff_doctor
LEFT JOIN (SELECT
t_visit_vital_sign.t_visit_id as t_visit_id,visit_vital_sign_blood_presure,visit_vital_sign_weight,visit_vital_sign_temperature
,visit_vital_sign_height,visit_vital_sign_waistline,visit_vital_sign_heart_rate,visit_vital_sign_respiratory_rate,visit_vital_sign_hips
FROM t_visit INNER JOIN t_visit_vital_sign on t_visit_vital_sign.t_visit_id = t_visit.t_visit_id
WHERE visit_vital_sign_active = '1' and visit_vital_sign_blood_presure <> ''
and substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
AND substring(t_visit.visit_begin_visit_time,1,10) <= '2554-01-05'
GROUP BY t_visit_vital_sign.t_visit_id,visit_vital_sign_blood_presure,record_date,record_time,visit_vital_sign_weight,visit_vital_sign_heart_rate
,visit_vital_sign_height,visit_vital_sign_waistline,visit_vital_sign_temperature,visit_vital_sign_respiratory_rate,visit_vital_sign_hips
ORDER BY record_date,record_time ) as q1
ON q1.t_visit_id = t_visit.t_visit_id
LEFT JOIN (SELECT t_visit_physical_exam.t_visit_id as t_visit_id ,array_to_string(array_agg(visit_physical_exam_body || ':' || visit_physical_exam_detail), ', ') as physical_exam
FROM t_visit INNER JOIN t_visit_physical_exam on t_visit_physical_exam.t_visit_id = t_visit.t_visit_id
WHERE substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
AND substring(t_visit.visit_begin_visit_time,1,10) <= '2554-01-05'
GROUP BY t_visit_physical_exam.t_visit_id
) as q2
ON q2.t_visit_id = t_visit.t_visit_id
LEFT JOIN (SELECT t_visit_service.t_visit_id,b_employee.employee_firstname , b_employee.employee_lastname,t_visit_service.assign_date_time
from b_employee inner join t_visit_service on b_employee.b_employee_id = t_visit_service.visit_service_staff_doctor
inner join t_visit on t_visit.t_visit_id = t_visit_service.t_visit_id
WHERE substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
AND substring(t_visit.visit_begin_visit_time,1,10) <= '2554-01-05'
GROUP BY t_visit_service.t_visit_id,b_employee.employee_firstname , b_employee.employee_lastname,t_visit_service.assign_date_time
ORDER BY t_visit_service.assign_date_time ) as q3
ON q3.t_visit_id = t_visit.t_visit_id
,b_site
WHERE
t_visit.f_visit_status_id <> '4'
AND health_family_active = '1'
AND t_diag_icd10.diag_icd10_active = '1'
AND substring(t_visit.visit_begin_visit_time,1,10) >= '2554-01-01'
AND substring(t_visit.visit_begin_visit_time,1,10) <= '2554-01-05'
ORDER BY SEQ
-
pakee_06
- มือวางอันดับ 1

-
- โพสต์: 507
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
-
โดย k2003 » เสาร์ 17 มี.ค. 2012 7:49 pm
ศุกร์ หน้า มาอีกนะ

Bansang Hospital ขึ้นระบบ 2 กุมภาพันธ์ 2546 สปสช เขต 6
Server Dell R410 Two Six Core Intel(R) Xeon 3.0 GHz Memory 32 G with ECC
Main Server FreeBSD 8.3 amd64 PostgreSQL 9.1 Architecture amd64
Module Image,Dental,Welfare-จ่ายตรง, LIS
-

k2003
- มือวางอันดับ 3

-
- โพสต์: 162
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
-
โดย Nan_Y2K » เสาร์ 17 มี.ค. 2012 9:59 pm
มีประโยชน์มากมาย
เช่น คนไข้ 1 คนมารับบริการหลายวัน คิวรี่ออกมาจะได้อยู่บรรทัดเดียวซะที
โรงพยาบาลลาดยาว จ.นครสวรรค์
http://www.ladyao.org-----------------------------------
นฤพล แก้วชิงดวง
สาบานว่ารัก HospitalOS
-----------------------------------
Server Status :
Master Server Ubuntu10.04 64bit / PostgresPlus8.4 / HospitalOS3.9.19build07
Slave Backup with Slony
Module : Welfare / Dental / LabLis / NCD / Image
-

Nan_Y2K
- ระดับมืออาชีพ

-
- โพสต์: 616
- ลงทะเบียนเมื่อ: จันทร์ 29 ธ.ค. 2003 12:00 am
- ที่อยู่: โรงพยาบาลลาดยาว
-
โดย pakee_06 » อาทิตย์ 18 มี.ค. 2012 1:44 pm
-
pakee_06
- มือวางอันดับ 1

-
- โพสต์: 507
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
-
โดย pakee_06 » อาทิตย์ 18 มี.ค. 2012 1:51 pm
ถ้าพี่ๆ คนไหนติดตั้ง server เป็น postgres เวอร์ชัน 9 สามารถใช้ฟังก์ชัน string_agg () แทนการใช้ 2 ฟังก์ชัน array_to_string ()และ array_agg () ได้เลยนะคะ ไม่ต้องเขียน 2 รอบ
ตัวอย่าง เช่น
SELECT t_visit_physical_exam.t_visit_id as t_visit_id ,string_agg(visit_physical_exam_body || ' ' || visit_physical_exam_detail,', ') as physical_exam
FROM t_visit INNER JOIN t_visit_physical_exam on t_visit_physical_exam.t_visit_id = t_visit.t_visit_id
GROUP BY t_visit_physical_exam.t_visit_id
มีความสุขกับการใช้ Function นะก๊าบบบบ ^^
-
pakee_06
- มือวางอันดับ 1

-
- โพสต์: 507
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
-
โดย pakee_06 » อาทิตย์ 18 มี.ค. 2012 2:44 pm
Nan_Y2K เขียน:มีประโยชน์มากมาย
เช่น คนไข้ 1 คนมารับบริการหลายวัน คิวรี่ออกมาจะได้อยู่บรรทัดเดียวซะที
ไปลาดยาวเมื่อไหร่ อย่าลืมเลี้ยงข้าวโพดต้มตอบแทนด้วยนะคะ พี่แนน + พี่ต่ายด้วย เอิ๊กๆ ^^
-
pakee_06
- มือวางอันดับ 1

-
- โพสต์: 507
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
-
โดย Nan_Y2K » จันทร์ 19 มี.ค. 2012 9:09 am
pakee_06 เขียน:ถ้าพี่ๆ คนไหนติดตั้ง server เป็น postgres เวอร์ชัน 9 สามารถใช้ฟังก์ชัน string_agg () แทนการใช้ 2 ฟังก์ชัน array_to_string ()และ array_agg () ได้เลยนะคะ ไม่ต้องเขียน 2 รอบ
ตัวอย่าง เช่น
SELECT t_visit_physical_exam.t_visit_id as t_visit_id ,string_agg(visit_physical_exam_body || ' ' || visit_physical_exam_detail,', ') as physical_exam
FROM t_visit INNER JOIN t_visit_physical_exam on t_visit_physical_exam.t_visit_id = t_visit.t_visit_id
GROUP BY t_visit_physical_exam.t_visit_id
มีความสุขกับการใช้ Function นะก๊าบบบบ ^^
มีรพ.ไหนใช้ postgres 9 บ้างอ่ะ
โรงพยาบาลลาดยาว จ.นครสวรรค์
http://www.ladyao.org-----------------------------------
นฤพล แก้วชิงดวง
สาบานว่ารัก HospitalOS
-----------------------------------
Server Status :
Master Server Ubuntu10.04 64bit / PostgresPlus8.4 / HospitalOS3.9.19build07
Slave Backup with Slony
Module : Welfare / Dental / LabLis / NCD / Image
-

Nan_Y2K
- ระดับมืออาชีพ

-
- โพสต์: 616
- ลงทะเบียนเมื่อ: จันทร์ 29 ธ.ค. 2003 12:00 am
- ที่อยู่: โรงพยาบาลลาดยาว
-
โดย pakee_06 » จันทร์ 19 มี.ค. 2012 9:19 am
Nan_Y2K เขียน:pakee_06 เขียน:ถ้าพี่ๆ คนไหนติดตั้ง server เป็น postgres เวอร์ชัน 9 สามารถใช้ฟังก์ชัน string_agg () แทนการใช้ 2 ฟังก์ชัน array_to_string ()และ array_agg () ได้เลยนะคะ ไม่ต้องเขียน 2 รอบ
ตัวอย่าง เช่น
SELECT t_visit_physical_exam.t_visit_id as t_visit_id ,string_agg(visit_physical_exam_body || ' ' || visit_physical_exam_detail,', ') as physical_exam
FROM t_visit INNER JOIN t_visit_physical_exam on t_visit_physical_exam.t_visit_id = t_visit.t_visit_id
GROUP BY t_visit_physical_exam.t_visit_id
มีความสุขกับการใช้ Function นะก๊าบบบบ ^^
มีรพ.ไหนใช้ postgres 9 บ้างอ่ะ
ตอนนี้ยังไม่น่าจะมีโรงพยาบาลไหนลงนะคะ ยกเว้นทดลองที่เครื่องตัวเองค่ะ ^^
-
pakee_06
- มือวางอันดับ 1

-
- โพสต์: 507
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
-
โดย Nan_Y2K » จันทร์ 07 พ.ค. 2012 1:06 am
มีใครเอา sql ที่น้องก้อยเขียนนี้ไปใช้แล้วบ้างครับ
โรงพยาบาลลาดยาว จ.นครสวรรค์
http://www.ladyao.org-----------------------------------
นฤพล แก้วชิงดวง
สาบานว่ารัก HospitalOS
-----------------------------------
Server Status :
Master Server Ubuntu10.04 64bit / PostgresPlus8.4 / HospitalOS3.9.19build07
Slave Backup with Slony
Module : Welfare / Dental / LabLis / NCD / Image
-

Nan_Y2K
- ระดับมืออาชีพ

-
- โพสต์: 616
- ลงทะเบียนเมื่อ: จันทร์ 29 ธ.ค. 2003 12:00 am
- ที่อยู่: โรงพยาบาลลาดยาว
-
โดย therd1181 » ศุกร์ 11 พ.ค. 2012 11:01 am
ขอบคุณครับ น่าสนใจมากเรยยยยย..
ธรรมชาติน่ายล ภูมิพลเขื่อนใหญ่ พระเจ้าตากเกรียงไกร เมืองไม้และป่างาม "สุดประจิมที่ริมเมย" เมืองหมอกงามล้ำ ถ้ำแสนวิจิจร ชีวิตชาวดอย
Mr.Therdsak Boonchu (Computer Engineering Tak)
Thasongyang Hospital..
Web: http://www.thasongyang.com
Web board: http://www.thasongyang.com/board/
Server
-acer...
-HP ...
Hospital-OS Version.
-Hos3.9.17bulid01
OS
-CentOS
Postgresql
-8.4.x
Backup
-Slony-I
-

therd1181
- มือใหม่

-
- โพสต์: 31
- ลงทะเบียนเมื่อ: พฤหัสฯ. 11 มิ.ย. 2009 9:38 pm
- ที่อยู่: Thasongyang-Hospital
-
โดย chumsin » พุธ 27 มิ.ย. 2012 12:39 am
ขอบคุณน้องก้อย มากๆ ลองแล้วโอเคเลย ผมลองเขียน xml มาลองให้ใช้กันโดยใช้ sql ของน้องก้อย ผมเรียก admit_chart
ใช้ print แนบชาร์ตผู้ป่วยใน ได้คะแนน auditอีก 2 คะแนน
ดาวน์โหลด!!!
http://db.tt/tuqqanfg แตกไฟล์ออกแล้วเอาไปแปะใน ../hprinting/byuser
เงื่อนไขในการใช้ ต้องเป็นผู้ป่วยใน
-

chumsin
- ระดับเทพแห่งเว็บบอร์ด HospitalOS

-
- โพสต์: 1620
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
-
โดย kapong_hosp2 » เสาร์ 28 ก.ค. 2012 6:13 pm
โอ้ว สุดยอดที่สุดเลย
-

kapong_hosp2
- มือใหม่

-
- โพสต์: 37
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
- ที่อยู่: โรงพยาบาลกะปงชัยพัฒน์ จ.พังงา
โดย pakee_06 » พฤหัสฯ. 25 ต.ค. 2012 1:01 pm
chumsin เขียน:ขอบคุณน้องก้อย มากๆ ลองแล้วโอเคเลย ผมลองเขียน xml มาลองให้ใช้กันโดยใช้ sql ของน้องก้อย ผมเรียก admit_chart
ใช้ print แนบชาร์ตผู้ป่วยใน ได้คะแนน auditอีก 2 คะแนน
ดาวน์โหลด!!!
http://db.tt/tuqqanfg แตกไฟล์ออกแล้วเอาไปแปะใน ../hprinting/byuser
เงื่อนไขในการใช้ ต้องเป็นผู้ป่วยใน
ดัน ดัน
-
pakee_06
- มือวางอันดับ 1

-
- โพสต์: 507
- ลงทะเบียนเมื่อ: พฤหัสฯ. 01 ม.ค. 1970 7:00 am
-
ย้อนกลับไปยัง เรื่องการออกรายงาน
ผู้ใช้งานขณะนี้
่กำลังดูบอร์ดนี้: ไม่มีสมาชิก และ บุคคลทั่วไป 1 ท่าน