รวมยอดซื้อของสมาชิกตามเงื่อนไข
กระทู้เก่าบอร์ด อ.Yeadram

 1,686   8
URL.หัวข้อ / URL
รวมยอดซื้อของสมาชิกตามเงื่อนไข

ถ้าเราอยากรู้ยอดรวมของจำนวนเงินที่สมาชิกมาซื้อของเรา และจำนวนวันนับจากวันสุดท้ายที่เค้ามาซื้อของเรา จนถึงวันที่เราคิด เราจะเขียนโค๊ตยังงัยครับ
ตารางชื่อ income มี 4 ฟิลด์ คือ IDmem(รหัสสมาชิก) BuyDate(วันที่ซื้อ) Money(จำนวนเงิน) DifDay(ห่างจากครั้งล่าสุดกี่วัน)
BuyDate    IDmem     Money     DifDay
1/7/2554    1              100
1/7/2554    2               90           
1/7/2554    3              350
2/7/2554    2              150          1
2/7/2554    3              350          1
3/7/2554    1              150          2
7/7/2554    2              200          5


8 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R10579
สร้างคิวรี่สองตัว
ตัวที่ 1(Q1) หาวันสุดท้าย และระยะเวลานับจากวันนี้

select IDmen, Last(BuyDate) as Ldate, Datediff("d", BuyDate, now()) as DifDay
from income
group by IDmen;


ตัวที่ 2(Q2) หายอดรวมการขาย สำหรับแต่ละสมาชิก
select IDmen, sum(Money) as sMoney
from income
group by IDmen;


แล้วเอาคิวรี่ทั้งสองมารวมกันเพื่อแสดงผลตามต้องการ
Select Ldate as BuyDate, Q1.IDmen, sMoney as Money, DifDay
From Q1 inner join Q2 on Q1.IDmen=Q2.IDmen;


ถ้าคล่องแล้ว อาจจะประยุกต์ทำเป็นคิวรี่ตัวเดียว แล้วใช้ Sub query ช่วยก็ได้ครับ
2 @R10580
อาจารย์ครับผมทำฟอร์มไว้โดยบันทึกข้อมูลแล้วหน้าฟอร์มจะคำนวน วันที่แตกต่างไว้เรียบร้อยแล้วครับ แต่ที่จะทำคือ
ณ วันที่จะคำนวนยอดรวมจะคลิกปุ่มคำสั่ง แล้วยอดรวม เข้าไปอยู่ใน record สุดท้าย และวันสุดท้ายจนถึงวันที่คำนวน ของแต่ละคนเลยครับ มันจึงใช้ Query ไม่ได้ มันต้อง วนลูปทีละคน ผมจึงทำไม่ได้ครับ
3 @R10586
เนื่องจากผมไม่เคยเรียน หรือมีตัวอย่างในแบบที่ต้องการครับ
ผมจะลองทำเองแต่ก็ไม่รู้เรื่อง VB แต่จะลองทำเองดู ขอคำสั่งต่างๆหน่อยครับเช่น
คำสั่งนำค่าที่ได้จาก Query ไปใช้
คำสั่งนำค่าจากQuery ไปใส่ไว้ใน Reccord สุดท้ายของทุกๆ คน
แล้วผมจำลองผิดลองถูกเองครับ
4 @R10589
Do Until หมายถึงทำไปจะถึง....ใช้มั้ยครับ แล้วมันคู่กับอะไรครับ
EOF ,With ,Loop ,dbOpenSnapshot ,dbOpenDynaset อันนี้หมายถึงอะไรครับ ใช้ยังงัยครับ
รู้ประมาณนี้ น่าจะพอทำได้เพราะเข้าไปดูแต่ละอัน เจออยู่ประมาณนี้

5 @R10591
ลองผิดลองถูกไปมา มันออกมาแบบที่ต้องการได้ครับ ประมาณนี้

            Set dbs = CurrentDb
            Set rstQ = dbs.OpenRecordset("คิวรี่ที่หายอดรวม", dbOpenSnapshot)
            Set rstT = dbs.OpenRecordset("ตารางที่ให้บันทึกค่า", dbOpenDynaset)
            Do Until rstQ.EOF
                    rstT.addNew
                    rstT!รหัสสมาชิก= rstQ!รหัสสมาชิก
                    rstT!วันที่ซื้อ= date
                    rstT!ยอดซื้อรวม= rstQ!ยอดซื้อรวม
                    rstT!DPrate = rstQ!Lrate
                    rstT!จำนวนวันที่ซื้อครั้งที่แล้ว= rstQ!วันที่ซื้อครั้งที่แล้ว-Date
                    rstT.update
                    rstQ.MoveNext
            Loop
            
            MsgBox "เรียบร้อย"
            DoCmd.Close

ตรงไหนควรแก้เป็นอย่างไร ผู้รู้ชี้แนะด้วยครับ
6 @R10592
แล้วถ้าเราจะใส่เงื่อนไข ว่า
ถ้าลูกค้าซื้อมากกว่า 3 ครั้ง ให้บันทึกลงไปในฟิลด์นึงว่า (A)ซึ่งผมจะหมายถึงลูกค้าประจำ
เราจะใส่ตรงไหน แล้วคำสั่งจะเป็นแบบไหนครับ
7 @R10599
ขออภัยครับ ไม่ว่างเข้ามาดูเว็บหลายวัน (เกือบสัปดาห์เลย) ไม่ได้มาตอบเลยครับ
คำถามก่อนๆ ก็น่าตอบหลายข้อ
แต่เห็นว่ามีทางทำได้เลย ก็ขอข้ามไปเลยนะครับ
มาที่คำถามสุดท้ายเลยก็แล้วกัน "ถ้าลูกค้าซื้อมากกว่า 3 ครั้ง ....."

จะให้บันทึก A ลงไหนฟิลด์ไหน และเรคคอร์ดไหนครับ ต้องระบุด้วยครับ
ถ้าสมมติว่ามีฟิลด์เพิ่มมาในตาราง เก็บ text กว้าง 1 ชือฟิลด์ว่า cKindOf


- ให้นับจำนวนการซื้อของลูกค้าแต่ละรหัส
- ถ้าผลการนับ มากกว่าหรือเท่ากับ สาม ให้
- บันทึกข้อมูลว่า "A" ลงในฟิลด์ cKind ในเรคคอร์ดสุดท้าย ที่เป็นเรคคอร์ดของลูกค้ารหัสนั้นๆ

            Set rstQ = noting
            Set rstT = nothing

Set rstQ = dbs.OpenRecordset("select IDmen, Last(BuyDate) as Lbuy from income group by IDmen", dbOpenSnapshot)

dim Cnt as long
dim Sq as string
            Do Until rstQ.EOF

cnt = dcount("BuyDate","income","[IDmen] = " & rstQ("IDmen"))
if cnt >=3 then
sq = "Update income set cKind='A' Where [IDmen] = " _
& rstQ("IDmen") & " AND BuyDate = " & rstQ("Lbuy")
docmd.runsql sq
end if

                    rstQ.MoveNext
            Loop
            MsgBox "เรียบร้อย"
            DoCmd.Close
8 @R10626
ขอบคุณ อ.yeadram อีกครั้งครับชอบ ผมทำได้แบบฟรุคๆ ครับ ยังไม่เข้าใจเท่าไหร่ คือ ผมใช้แนว Query ที่ตัวเองถนัด แล้วก็ตามที่ อาจารย์แนะนำ เอา ความต้องการ 2 แบบมาทำ Query แล้วค่อยเขียน VB จนออกมาแบบที่ต้องการแล้วครับ
จอนนี้อยากให้อาจารย์ แนะนำคำถาม กระทู้ R10589 หน่อยครับ จะได้หัดทำไปเรื่อยๆ จากกระทู้ที่อาจารย์ตอบคนอื่นด้วยครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3535s