... ถ้าต้องการได้ผลรวมของจำนวนใน dtvalue ของตาราง dtdetail2 โดยแยกเป็นราย vn และดูจากวันที่ที่มารับบริการด้วย
อย่างแรกเลยคงจะใช้การ join กับตาราง dtmain เพื่อนำวันที่รับบริการมาใช้ไม่ได้หรอกครับ เพราะข้อมูลที่ได้ออกมาจะผิดพลาดได้
เนื่องจากทั้งตาราง dtdetail2 และ dtmain ใน 1 vn อาจมีข้อมูลอยูในตารางอยู่มากกว่า 1 record ได้ครับ
ถ้า vn นั้นๆ มีอยู่แค่ตารางละ 1 record ก็ไม่เป็นไร แต่ถ้าสมมุติว่า vn นั้นมีข้อมูลอยู่ใน dtdetail2 และ dtmain ตารางละ 2 record เวลา join กันแล้วข้อมูลที่ได้ออกมาจะมี 4 record ครับ ไม่ใช่ 2 record ผลรวมของจำนวนใน dtvalue ที่ได้ออกมาก็จะมากเกินความเป็นจริงครับ
ถ้าต้องการใช้วันที่ที่มารับบริการด้วย ใช้การ join จากตาราง ovst ก็ได้ครับ ลองใช้คำสั่งตามข้างล่างดูนะครับ
select d.vn,sum(d.dtvalue)
from dtdetail2 d,ovst o
where o.vstdate between '2006-04-01' and '2006-06-30'
and d.vn = o.vn
and d.dtcode in ('405','410','416','421')
group by d.vn
...
...