BMS-HOSxP Community

HOSxP => Report Exchange => ข้อความที่เริ่มโดย: yokyai ที่ มิถุนายน 03, 2010, 11:11:22 AM

หัวข้อ: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: 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

ขอบคุณคับ
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: Khuad ที่ มิถุนายน 03, 2010, 13:54:19 PM
... ลองแบนี้น่าจะได้นะครับ  ...

... สมมุติว่า
    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 ...

หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: Khuad ที่ มิถุนายน 03, 2010, 13:55:55 PM

... ส่วนถ้าจะวางคำสั่งในตัวรายงานก็ลอง

------------------------------------------------------------------------------

    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 ...
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: yokyai ที่ มิถุนายน 03, 2010, 14:07:57 PM
ขอบคุณ อ.ขวด  และ คุณ woravet ที่ให้คำปรึกษาทาง email  ใช้ได้ทั้ง 2 script เลยคับ เป็นประโยชน์มาก
ถามอีกเรื่องคับ จะมีปัญหาเวลาใช้ subreport หลายตัวต่อกัน รายงานมันจะซ้อนกันคับ ทำอย่างไรคับ
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: Khuad ที่ มิถุนายน 03, 2010, 14:24:46 PM

ถามอีกเรื่องคับ จะมีปัญหาเวลาใช้ subreport หลายตัวต่อกัน รายงานมันจะซ้อนกันคับ ทำอย่างไรคับ


... ถ้ายังไม่ได้ เดี๋ยวขอเป็นช่วงเย็นนะครับ มีงานนิดหน่อยครับตอนนี้ ...  :D ...
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: yokyai ที่ มิถุนายน 03, 2010, 15:51:06 PM
อ.ขวดคับ พอไปใส่ sub report มันออกมาน้อยกว่าจำนวนจริง  ไม่ทราบว่าเกิดจากอะไรคับ
ตรง beforegenerate ก็ใส่แล้วนะคับ นับแล้วน้อยกว่ามากคับ
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: Khuad ที่ มิถุนายน 03, 2010, 15:58:25 PM
อ.ขวดคับ พอไปใส่ sub report มันออกมาน้อยกว่าจำนวนจริง  ไม่ทราบว่าเกิดจากอะไรคับ
ตรง beforegenerate ก็ใส่แล้วนะคับ นับแล้วน้อยกว่ามากคับ

... ลองส่งรายงานขึ้นมาให้ดูหน่อยนะครับ เดี๋ยวลองตรวจสอบดูให้ครับ ...  :D ....
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: Khuad ที่ มิถุนายน 03, 2010, 17:36:54 PM

ถามอีกเรื่องคับ จะมีปัญหาเวลาใช้ subreport หลายตัวต่อกัน รายงานมันจะซ้อนกันคับ ทำอย่างไรคับ


... ถ้ายังไม่ได้ เดี๋ยวขอเป็นช่วงเย็นนะครับ มีงานนิดหน่อยครับตอนนี้ ...  :D ...


... พอดีผมเห็นว่าตรงส่วนนี้น่าจะเป็นประโยชน์แก่ผู้อื่นด้วย  ก็เลยขอคุณ yokyai ไปตอบในกระทู้ใหม่เลยนะครับ
   
    เผื่อว่าจะมีประโยชน์เวลาไปค้นหาข้อมูลย้อนหลังครับ  ตามกระทู้ข้างล่างนี้เลยครับ ...  :D ...

   วิธีทำให้ SubReport/Region แสดงผลแบบเรียงต่อเนื่องในรายงาน (http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=15540.msg124756#new)
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: yokyai ที่ มิถุนายน 07, 2010, 13:48:52 PM
อ.ขวดคับ 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  ');
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: Khuad ที่ มิถุนายน 07, 2010, 17:28:17 PM

... คำสั่งในรายงานมันซ้ำซ้อนกันครับ ...

... ต้องการรายงานแบบนี้ วางคำสั่งที่ต้องการใช้ดึงข้อมูลแค่ GlobalOnCreate จุดเดียวก็พอครับ 
    ส่วนอื่นๆ ลองแก้ไขดูนะครับ .
    เช่น ที่ตรง join มี depcode = 023  แต่ตรง where มี depcode = 021 อยู่ด้วย แล้วก็ตรงนับจำนวนในเวลา ต้องนับจาก ovst(ในคำสั่งของ variable นับจาก vn_stat ซึ่งไม่มี field  visit_type อยู่ในตาราง) ...  :D ...
   
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: yokyai ที่ มิถุนายน 08, 2010, 08:50:53 AM
ขอบคุณ อ.ขวดคับ จะลองดูนะคับ เหตุที่จำเป็นต้องแบ่งเป็นหลาย sup เพราะว่าจะแยกระหว่างแพทย์ที่มาในเวลาและนอกเวลาด้วยคับ แต่ถ้าเอาแพทย์มาทั้งหมดจะทำให้มีแพทย์ที่ไม่ได้มานอกเวลาติดมาด้วยคับ เลยดูจะมั่ว ๆ หน่อย  :)
หัวข้อ: Re: รบกวนดู script ให้ด้วยคับ ใช้แบบนี้ได้ไหม
เริ่มหัวข้อโดย: yokyai ที่ มิถุนายน 08, 2010, 13:30:31 PM
โหลดแล้วแสดง error คับ