ต้องการให้ข้อมูลของแต่ละplan มี tran_id ครบทั้ง 12 number
จากข้อมูลจะเห็นว่า plan B มี tran_id ไม่ครบ ซึ่งขาด 1,2,3,7,8,และ12ไป
ดังนั้น จึงต้องการselect ข้อมูลโดยให้มแสดงrecordของtran_idที่ขาดไป
โดย record ที่ขาดไปจะต้องมีข้อมูลdate,amount=0
อีกทั้งให้ mark flag
ในกรณีrecordนั้น มีข้อมูลtran_id อยู่แล้ว ให้ flag=0
แต่ในกรณีที่ recordนั้น เป็นrecord ที่เพิ่ม tran_idที่ขาด
ถ้า amount=0 และเป็น record เริ่มต้น
เช่น plan B ขาดtran_idตั้งแต่1-3ไป ให้ flag=2
ถ้า amount=0 อยู่กลางทางถึงสิ้นสุดtran_idที่12 ให้ flag=1
อันนี้เป็นตัวอย่าง การแสดงรายการ ของทุกเดือน ส่วน flag คงต้องคิดเอาเองล่ะครับ อ่านแล้วไม่เข้าใจ Code (SQL)
select g.plan, tmp.dte as `date`, tmp.tran_id, coalesce( tb.amount, 0) as amount
from (
Select '2013-10-01' as dte, 1 as tran_id'
union Select '2013-11-01' as dte, 2 as tran_id'
union Select '2013-12-01' as dte, 3 as tran_id'
union Select '2014-01-01' as dte, 4 as tran_id'
union Select '2014-02-01' as dte, 5 as tran_id'
union Select '2014-03-01' as dte, 6 as tran_id'
union Select '2014-04-01' as dte, 7 as tran_id'
union Select '2014-05-01' as dte, 8 as tran_id'
union Select '2014-06-01' as dte, 9 as tran_id'
union Select '2014-07-01' as dte, 10 as tran_id'
union Select '2014-08-01' as dte, 11 as tran_id'
union Select '2014-09-01' as dte, 12 as tran_id'
) as tmp
left join (
select plan form table group by plan
) as g
left join table as tb on tb.tran_id=tmp.tran_id and tb.plan=g.plan