กระทู้เก่าบอร์ด อ.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
จะต้องทำอย่างไรครับ
ผมมีตาราง ประกอบด้วย 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
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
ต้องขอขอบคุณมากๆเลยครับที่กรุณา
สำหรับค่า 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
จบงาน !
แสดงว่า / เป็นไปได้ว่า ...
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
จบงาน !
Time: 0.3211s
หรือว่า มันเป็นวิธีการคำนวนทางคณิตศาสตร์ขั้นสูงอะไรหรือเปล่า ไม่รู้จักครับ
ถ้ามันเป็นอย่างนั้นจริง อาจจะเสียเวลาอธิบายนานเกินไป ก็เอาสั้นๆ ก็ได้ เช่น ช่วยอธิบายที่มาที่ไป หรือวิธีการคำนวน หน่อยครับ
สมมติเช่น รายการแรก ทำอย่างไร ถึงได้ ค่า 17.24 ครับ เอาค่าอะไรทำอะไรกับฟิลด์อะไรถึงได้ตัวเลขนี้มา