หาผลรวมสะสม
กระทู้เก่าบอร์ด อ.Yeadram

 3,227   3
URL.หัวข้อ / URL
หาผลรวมสะสม

ผมขอคำแนะนำด้วยครับ
ผมมีตาราง ประกอบด้วย 5 ฟิลด์ ดังนี้
ITEM     T_PRICE     ACCU_PR     ACCU_PERCENT     CLASS
A     100               
B     90               
C     80               
D     70               
E     60               
F     50               
G     40               
H     30               
I     25               
J     20               
K     15               

1.ต้องการหาผลรวมแบบสะสมของฟิลด์ T_PRICE และ ค่าที่ได้ให้ลงในฟิลด์ ACCU_PR
2.จากนั้นให้คำนวนเปอร์เซนต์สะสมของฟิลด์ ACCU_PR และ ค่าที่ได้ให้ลงในฟิลด์ ACCU_PERCENT
3.จากนั้นในช่องฟิลด์ CLASS ค่าที่ได้จะขึ้นกับเงื่อนไข ดังนี้
     ถ้าค่า ACCU_PERCENT อยู่ในช่วง 1-75 จะมีค่าเท่ากับ A
     ถ้าค่า ACCU_PERCENT อยู่ในช่วง 76-90 จะมีค่าเท่ากับ B
     ถ้าค่า ACCU_PERCENT อยู่ในช่วง 91-100 จะมีค่าเท่ากับ C
ตารางที่ได้ จะเป็นดังนี้
ITEM     T_PRICE     ACCU_PRICE     ACCU_PERCENT     CLASS
A     100     100                      17.24                    A
B     90     190                      32.76                    A
C     80     270                    46.55                    A
D     70     340                    58.62                    A
E     60     400                    68.97                    A
F     50     450                    77.59                    B
G     40     490                    84.48                    B
H     30     520                    89.66                    B
I     25     545                    93.97                    C
J     20     565                    97.41                    C
K     15     580                   100.00                    C

จะต้องทำอย่างไรครับ

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

1 @R06355
ไม่เข้าใจโจทก์ข้อ 2 ครับ "คำนวนเปอร์เซนต์สะสม"
หรือว่า มันเป็นวิธีการคำนวนทางคณิตศาสตร์ขั้นสูงอะไรหรือเปล่า ไม่รู้จักครับ

ถ้ามันเป็นอย่างนั้นจริง อาจจะเสียเวลาอธิบายนานเกินไป ก็เอาสั้นๆ ก็ได้ เช่น ช่วยอธิบายที่มาที่ไป หรือวิธีการคำนวน หน่อยครับ
สมมติเช่น รายการแรก ทำอย่างไร ถึงได้ ค่า 17.24 ครับ เอาค่าอะไรทำอะไรกับฟิลด์อะไรถึงได้ตัวเลขนี้มา
2 @R06357
ต้องขอโทษอาจารย์ด้วยครับที่ไม่ได้อธิบายให้ละเอียดตั้งแต่ต้น
สำหรับค่า 17.24 (ฟิลด์ ACCU_PRECENT ของ ITEM A) มาจาก
ACCU_PRICE ของ ITEM A หารด้วย ACCU_PRICE ของ ITEM K คูณด้วย 100
และ สำหรับค่า 34.76 (ฟิลด์ ACCU_PRECENT ของ ITEM B) มาจาก
ACCU_PRICE ของ ITEM B หารด้วย ACCU_PRICE ของ ITEM K คูณด้วย 100
และ สำหรับค่า 46.55 (ฟิลด์ ACCU_PRECENT ของ ITEM C) มาจาก
ACCU_PRICE ของ ITEM C หารด้วย ACCU_PRICE ของ ITEM K คูณด้วย 100
ต่อเนื่องจน
สำหรับค่า 100.00 (ฟิลด์ ACCU_PRECENT ของ ITEM K) มาจาก
ACCU_PRICE ของ ITEM K หารด้วย ACCU_PRICE ของ ITEM K คูณด้วย 100

ต้องขอขอบคุณมากๆเลยครับที่กรุณา
3 @R06361
ถ้าคุณมีค่าคงที่ ที่จะนำมาคำนวน ในที่นี้คุณระบุให้เป็นค่าของฟิลด์ ACCU_PRICE ของเรคคอร์ดที่ 11
แสดงว่า / เป็นไปได้ว่า ...
1) รายการของคุณมีจำนวนคงที่ ที่ 11 รายการไม่มากไปกว่านี้ไม่น้อยไปกว่านี้
2) รายการของคุณอาจมีมากกว่า หรือน้อยกว่านี้ก็ได้ แต่เราจะยึดถือเอา "รายการสุดท้าย" มาคำนวน

ถ้าเป็นกรณีที่ 1) แนะนำให้ใช้เครื่องคิดเลขกด แล้วเติมข้อมูลลงไปด้วยมือเลยครับ เร็วที่สุดสะดวกที่สุด เพราะมันแค่ 11 รายการเอง เขียนโค้ดหรือคิวรี่นานกว่านั้นแน่ๆ ครับ

ถ้าเป็นกรณีที่ 2) เวลาคุณตั้งคำถามควรระบุคำสำคัญคำนี้มาด้วย "เรคคอร์ดสุดท้าย" เพราะคุณจะเอาค่าของฟิลด์ ACCU_PRICE จากรายการนั้นมาใช้ ไม่ว่าจะแก้โจทก์ด้วย SQL เราก็อาจต้องใช้ Last, min, max ร่วมกับ Group By เป็นต้น
หรือไม่ว่าจะเป็นการแก้โจทก์ด้วย VBA เราก็อาจต้องจะต้องใช้ Dlast, Dmin , Loop ..Until หรือ Do Until เป็นต้น

การแก้โจทก์นี้ตามกรณีที่ 2 สามารถทำได้ทั้ง SQL คือการใช้ Update Query (ซึ่งต้องทำถึง อย่างน้อย 2 คิวรี่) แต่ค่อนข้างเขียนยาก
และสามารถแก้ได้ด้วยการเขียน Function ใน VBA (ผมขอแนะนำทางนี้ดีกว่า เร็วดี)
- ตรวจสอบความสมบูรณ์ของข้อมูลในตาราง : ฟิลด์ Item ของทุกๆ รายการห้ามมีค่า Null : ฟิลด์ T_Price ของทุกๆ รายการห้ามมีค่า Null
- เปิด Recordset ของตารางดังกล่าวโดยตั้งค่า Locktype และ permission ให้สามารถปรับปรุงข้อมูลได้ด้วย
- เก็บค่า Accu_price ของรายการสุดท้ายเข้าตัวแปร (ไว้ใช้ในสูตร)
- กำหนดตัวแปรผลรวมสะสม ค่าเริ่มต้นให้เท่ากับ 0
- เริ่มวนลูป (จะทำการวนด้วยจำนวนรอบ = จำนวนเรคคอ์ด)
+ + เพิ่มค่าผลรวมสะสม โดยค่าของฟิลด์ t_price ในรอบปัจจุบัน บวกกับผลรวมสะสม
+ + เอาไปเติมข้อมูลลงในฟิลด์ accu_price
+ + เอาค่า accu_price ไปกระทำตามสูตร แล้วเอาผลลัพธ์ใส่ฟิลด์ accu_percent
++ เอาค่า accu_percent มาตรวจสอบตามเงื่อนไข (มากกว่า 75 หรือไม่) แล้วเอาผลลัพธ์ใส่ในฟิลด์ class
- จบการวนลูป 1 รอบ (สั่งวนลูปรอบต่อไป)

ปิด recordset
จบงาน !


@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3211s