มาดูวิธีการใช้ variable ช่วยทำรายงานครับ ปกติรายงานต่างๆ สามารถใช้คำสั่ง SQL ดึงข้อมูลมาจัดรูปแบบในระบบรายงานได้อยู่แล้ว แต่มีบางกรณีที่วิธีการปกติทำไม่ได้หรือทำได้แต่ใช้เวลานานครับ ยกตัวอย่างเช่น รายงานสรุปยอดการใช้ยาทุกตัวในปี 2548 แยกจำนวนใบสั่ง และ มูลค่า โดยต้องการแสดงผลลัพท์ดังนี้
-----------------------------------------
รหัส | ชื่อ | จำนวนใบสั่ง | มูลค่า
-----------------------------------------
สำหรับคนที่เข้าใจ datadictionary และเขียนคำสั่ง SQL ได้คงจะยิ้มแล้วนึกในใจว่าหมูมาก แค่เขียนคำสั่งดังนี้
SELECT i.icode,i.name,i.strength,i.units,COUNT(DISTINCT o.vn) AS prescribe_count,COUNT(o.icode) AS item_count, SUM(o.qty) AS sum_qty,SUM(o.sum_price) AS tot_price
FROM drugitems i
LEFT OUTER JOIN opitemrece o ON o.icode = i.icode
WHERE o.rxdate BETWEEN '2005-01-01' AND '2005-12-31'
GROUP BY i.icode,i.name,i.strength,i.units
ก็เอาไปทำรายงานได้แล้ว แต่ปัญหาก็คือหากข้อมูลที่นำมาใช้ทำรายงานมีจำนวนเยอะมาก ระยะเวลาที่ใช้ทำรายงานก็จะนานมากเช่นเดียวกัน นั่งรอ 3 ชั่วโมง ยังไม่ได้รายงานเลย (ถาม อ.สุชัย ดูก็ได้ครับ นั่งรอทั้งคืนก็ยังไม่เสร็จ)
ถ้างั้นลองเปลี่ยนคำสั่งด้านบนให้ดึงรายงานของยาแค่ตัวเดียวมาก่อน ด้วยคำสั่งนี้
SELECT i.icode,i.name,i.strength,i.units,COUNT(DISTINCT o.vn) AS prescribe_count,COUNT(o.icode) AS item_count, SUM(o.qty) AS sum_qty,SUM(o.sum_price) AS tot_price
FROM drugitems i
LEFT OUTER JOIN opitemrece o ON o.icode = i.icode
WHERE o.icode='1470038' AND o.rxdate BETWEEN '2005-01-01' AND '2005-12-31'
GROUP BY i.icode,i.name,i.strength,i.units
ลองเอาไป run ดูใหม่ ปรากฎว่าใช้เวลาแค่อึดใจเดียวก็ได้ผลแล้ว แต่มันได้มาแค่ยาตัวเดียว มันไม่มาทั้งหมด ครั้นจะเอาไป copy แล้วเรียกใช้งานกับยาทุกตัว ก็คงจะไม่สะดวก สู้นั่งรอเหมือนเดิมดีกว่า
แล้วมาดูว่า Variable จะช่วยแก้ปัญหานี้ได้อย่างไร เริ่มต้นจากเปลี่ยนคำสั่งให้แสดงแค่ข้อมูลยาทุกตัวก่อน แล้วค่อยไปคำนวนจำนวนในระบบรายงานครับ โดยการเปลี่ยนคำสั่งที่ใช้ทำรายงานเป็นแบบ simple ๆ แบบนี้
SELECT icode,name,strength,units FROM drugitems ORDER BY name