BMS-HOSxP Community
HOSxP => Report Exchange => ข้อความที่เริ่มโดย: yokyai ที่ มิถุนายน 03, 2010, 11:11:22 AM
-
ChangeReportSQL('select doctor,count(depcode = "001") as total1,count(depcode="002") as total2 from pq_doctor '
+' where doctor_date between "'+ds1+'" and "'+ds2+'" '
+' group by doctor ');
นับจำนวนแล้วมันออกมาเท่ากันหมดเลยคับทั้ง total1 และ total2 ขอคำแนะนำอื่นๆด้วยคับ
อยากนับจำนวน workload โดยแยกตามแพทย์ และแผนกที่ตรวจ ถ้าใช้ variable ใช้เวลานานมากในการคำนวนคับ ยิ่งถ้าเลือกหลายวันยิ่งนาน
ชื่อแพทย์/แผนก ผู้ป่วยนอก Er ทันตกรรม ห้องคลอด รวม
นายแพทย์ 1 xxx xxx xxxx xxxx xxx
นายแพทย์ 2 xxx xxx xxxx xxxx xxx
นายแพทย์ 3 xxx xxx xxxx xxxx xxx
ขอบคุณคับ
-
... ลองแบนี้น่าจะได้นะครับ ...
... สมมุติว่า
depcode = 001 คือ ผู้ป่วยนอก(ไม่ทราบรวมห้องตรวจด้วยหรือเปล่าครับ)
depcode = 002 คือ Er
depcode = 003 คือ ทันตกรรม
depcode = 004 คือ ห้องคลอด
... ใช้คำสั่ง
------------------------------------------------------------------------------
select pq.doctor,d.name,
count(pq1.vn) as total_OPD,count(pq2.vn) as total_ER,
count(pq3.vn) as total_Dent,count(pq4.vn) as total_LR,
count(pq.vn) as total_All
from pq_doctor pq
left outer join doctor d on d.code = pq.doctor
left outer join pq_doctor pq1 on pq1.vn = pq.vn
and pq1.doctor = pq.doctor and pq.depcode = '001'
left outer join pq_doctor pq2 on pq2.vn = pq.vn
and pq2.doctor = pq.doctor and pq.depcode = '002'
left outer join pq_doctor pq3 on pq3.vn = pq.vn
and pq3.doctor = pq.doctor and pq.depcode = '003'
left outer join pq_doctor pq4 on pq4.vn = pq.vn
and pq4.doctor = pq.doctor and pq.depcode = '004'
where pq.doctor_date between '2010-05-01' and '2010-05-10'
and pq.depcode in ('001','002','003','004')
group by pq.doctor
order by pq.doctor
------------------------------------------------------------------------------
... อันนี้จะเรียกดูข้อมูลเฉพาะ 4 แผนกที่เรากำหนดไว้
ถ้าจะดูข้อมูลทั้งหมด ก็ไปลบเงื่อนไขตรง and pq.depcode in ('001','002','003','004') ออก
แล้วก็ไป join เพิ่มให้ครบทุกแผนกที่มีข้อมูลอยู่ในตาราง pq_doctor
ถ้า join ไม่ครบทุกแผนก ตรง total_All ซึ่งเป็นผลรวมอาจผิดพลาดครับ ...
... อีกอย่าง ในตาราง pq_doctor อาจมีที่เป็น vn เดียวกัน แพทย์คนเดียวกัน แต่มี 2 แผนก ได้ เช่นตรวจที่ OPD แล้วไปทำต่อที่ ER
เวลา่ join จึงต้องให้ทั้ง vn และ doctor ตรงกัน ไม่งั้นข้อมูลอาจคลาดเคลื่อนครับ ... :D ...
-
... ส่วนถ้าจะวางคำสั่งในตัวรายงานก็ลอง
------------------------------------------------------------------------------
ChangeReportSQL('select pq.doctor,d.name, '+
'count(pq1.vn) as total_OPD,count(pq2.vn) as total_ER, '+
'count(pq3.vn) as total_Dent,count(pq4.vn) as total_LR, '+
'count(pq.vn) as total_All '+
'from pq_doctor pq '+
'left outer join doctor d on d.code = pq.doctor '+
'left outer join pq_doctor pq1 on pq1.vn = pq.vn '+
'and pq1.doctor = pq.doctor and pq.depcode = "001" '+
'left outer join pq_doctor pq2 on pq2.vn = pq.vn '+
'and pq2.doctor = pq.doctor and pq.depcode = "002" '+
'left outer join pq_doctor pq3 on pq3.vn = pq.vn '+
'and pq3.doctor = pq.doctor and pq.depcode = "003" '+
'left outer join pq_doctor pq4 on pq4.vn = pq.vn '+
'and pq4.doctor = pq.doctor and pq.depcode = "004" '+
'where pq.doctor_date between between "'+ds1+'" and "'+ds2+'" '+
'and pq.depcode in ("001","002","003","004") '+
'group by pq.doctor '+
'order by pq.doctor ');
------------------------------------------------------------------------------
... ช่องผลรวม ก็คือ total_All นะครับ .... :D ...
-
ขอบคุณ อ.ขวด และ คุณ woravet ที่ให้คำปรึกษาทาง email ใช้ได้ทั้ง 2 script เลยคับ เป็นประโยชน์มาก
ถามอีกเรื่องคับ จะมีปัญหาเวลาใช้ subreport หลายตัวต่อกัน รายงานมันจะซ้อนกันคับ ทำอย่างไรคับ
-
ถามอีกเรื่องคับ จะมีปัญหาเวลาใช้ subreport หลายตัวต่อกัน รายงานมันจะซ้อนกันคับ ทำอย่างไรคับ
... ถ้ายังไม่ได้ เดี๋ยวขอเป็นช่วงเย็นนะครับ มีงานนิดหน่อยครับตอนนี้ ... :D ...
-
อ.ขวดคับ พอไปใส่ sub report มันออกมาน้อยกว่าจำนวนจริง ไม่ทราบว่าเกิดจากอะไรคับ
ตรง beforegenerate ก็ใส่แล้วนะคับ นับแล้วน้อยกว่ามากคับ
-
อ.ขวดคับ พอไปใส่ sub report มันออกมาน้อยกว่าจำนวนจริง ไม่ทราบว่าเกิดจากอะไรคับ
ตรง beforegenerate ก็ใส่แล้วนะคับ นับแล้วน้อยกว่ามากคับ
... ลองส่งรายงานขึ้นมาให้ดูหน่อยนะครับ เดี๋ยวลองตรวจสอบดูให้ครับ ... :D ....
-
ถามอีกเรื่องคับ จะมีปัญหาเวลาใช้ subreport หลายตัวต่อกัน รายงานมันจะซ้อนกันคับ ทำอย่างไรคับ
... ถ้ายังไม่ได้ เดี๋ยวขอเป็นช่วงเย็นนะครับ มีงานนิดหน่อยครับตอนนี้ ... :D ...
... พอดีผมเห็นว่าตรงส่วนนี้น่าจะเป็นประโยชน์แก่ผู้อื่นด้วย ก็เลยขอคุณ yokyai ไปตอบในกระทู้ใหม่เลยนะครับ
เผื่อว่าจะมีประโยชน์เวลาไปค้นหาข้อมูลย้อนหลังครับ ตามกระทู้ข้างล่างนี้เลยครับ ... :D ...
วิธีทำให้ SubReport/Region แสดงผลแบบเรียงต่อเนื่องในรายงาน (http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=15540.msg124756#new)
-
อ.ขวดคับ code ตามที่ให้มา แปลงนิดหน่อย แต่ว่าออกมาอย่างที่แนบไฟล์เลยคับ ไม่ทราบว่าทำไม แต่ว่าพอเอาไป query ใน sql command ก็ปกติคับ ทำอะไรผิดหรือเปล่าคับ
ChangeDBPipeLineLink1SQL('select pq.doctor, '+
'count(distinct pq1.vn) as total_OPD,count(distinct pq2.vn) as total_ER, '+
'count(distinct pq3.vn) as total_LR,count(distinct pq4.vn) as total_SS, '+
'count(distinct op.vn) as total_OPER,count(distinct pq.vn) as total_OPD_All, '+
'count(distinct o.vn) as total_ER2 '+
'from pq_doctor pq '+
'left outer join doctor d on d.code=pq.doctor '+
'left outer join ovst o on o.vn = pq.vn '+
'left outer join operation_list op on op.vn=pq.vn '+
'and op.request_doctor=pq.doctor and pq.doctor_date=op.request_operation_date '+
'left outer join pq_doctor pq1 on pq1.vn = pq.vn '+
'and pq1.doctor = pq.doctor and pq1.depcode in (001,002,003,004,005,006,007,008,022,032) '+
'left outer join pq_doctor pq2 on pq2.vn = pq.vn '+
'and pq2.doctor = pq.doctor and pq2.depcode = 011 '+
'left outer join pq_doctor pq3 on pq3.vn = pq.vn '+
'and pq3.doctor = pq.doctor and pq3.depcode = 014 '+
'left outer join pq_doctor pq4 on pq4.vn = pq.vn '+
'and pq4.doctor = pq.doctor and pq4.depcode = 023 '+
'where pq.doctor_date between "'+ds1+'" and "'+ds2+'" '+
'and pq.depcode in (001,002,003,004,005,006,007,008,022,032,011,014,021) '+
'and o.visit_type = "I" and d.position_id = "1" and code<>"145" group by pq.doctor ');
ChangeDBPipeLineLink2SQL('select pq.doctor, '+
'count(distinct pq1.vn) as total_OPD,count(distinct pq2.vn) as total_ER, '+
'count(distinct pq3.vn) as total_LR,count(distinct pq4.vn) as total_SS, '+
'count(distinct op.vn) as total_OPER,count(distinct pq.vn) as total_OPD_All, '+
'count(distinct o.vn) as total_ER2 '+
'from pq_doctor pq '+
'left outer join doctor d on d.code=pq.doctor '+
'left outer join ovst o on o.vn = pq.vn '+
'left outer join operation_list op on op.vn=pq.vn '+
'and op.request_doctor=pq.doctor and pq.doctor_date=op.request_operation_date '+
'left outer join pq_doctor pq1 on pq1.vn = pq.vn '+
'and pq1.doctor = pq.doctor and pq1.depcode in (001,002,003,004,005,006,007,008,022,032) '+
'left outer join pq_doctor pq2 on pq2.vn = pq.vn '+
'and pq2.doctor = pq.doctor and pq2.depcode = 011 '+
'left outer join pq_doctor pq3 on pq3.vn = pq.vn '+
'and pq3.doctor = pq.doctor and pq3.depcode = 014 '+
'left outer join pq_doctor pq4 on pq4.vn = pq.vn '+
'and pq4.doctor = pq.doctor and pq4.depcode = 023 '+
'where pq.doctor_date between "'+ds1+'" and "'+ds2+'" '+
'and pq.depcode in (001,002,003,004,005,006,007,008,022,032,011,014,021) '+
'and o.visit_type = "O" and d.position_id = "1" and code<>"145" group by pq.doctor ');
-
... คำสั่งในรายงานมันซ้ำซ้อนกันครับ ...
... ต้องการรายงานแบบนี้ วางคำสั่งที่ต้องการใช้ดึงข้อมูลแค่ GlobalOnCreate จุดเดียวก็พอครับ
ส่วนอื่นๆ ลองแก้ไขดูนะครับ .
เช่น ที่ตรง join มี depcode = 023 แต่ตรง where มี depcode = 021 อยู่ด้วย แล้วก็ตรงนับจำนวนในเวลา ต้องนับจาก ovst(ในคำสั่งของ variable นับจาก vn_stat ซึ่งไม่มี field visit_type อยู่ในตาราง) ... :D ...
-
ขอบคุณ อ.ขวดคับ จะลองดูนะคับ เหตุที่จำเป็นต้องแบ่งเป็นหลาย sup เพราะว่าจะแยกระหว่างแพทย์ที่มาในเวลาและนอกเวลาด้วยคับ แต่ถ้าเอาแพทย์มาทั้งหมดจะทำให้มีแพทย์ที่ไม่ได้มานอกเวลาติดมาด้วยคับ เลยดูจะมั่ว ๆ หน่อย :)
-
โหลดแล้วแสดง error คับ