ยกมา-รับ-จ่าย-คงเหลือ อีกรูปแบบหนึ่ง
กระทู้เก่าบอร์ด อ.Yeadram

 1,772   4
URL.หัวข้อ / URL
ยกมา-รับ-จ่าย-คงเหลือ อีกรูปแบบหนึ่ง

เคยโพสถามอาจารย์ไปแล้วเรื่องนี้ (ตามลิ้งนี้)พบปัญหาคือ Query มันช้ามาก เลยออกแบบตารางใหม่ โดยเพิ่มฟิลด์ คงเหลือมา ดังนี้
ชื่อสินค้า           วันที่รับ-จ่าย        รับ        จ่าย        คงเหลือ
Product(A)          7/1/2013        10                          10
Product(A)          8/1/2013                      2               8
Product(A)        10/1/2013                      1               7
Product(A)        14/1/2013          4           1              10
Product(A)        16/1/2013                      4               6
Product(A)        22/1/2013          6                           12
Product(A)        23/1/2013                      5               7
Product(B)          8/1/2013          3           1               2
Product(B)        11/1/2013          2                            4
Product(B)        14/1/2013          5            6              3
Product(B)        16/1/2013          3                            6
Product(B)        21/1/2013          2                            8
อยากให้ออกมาเป็นแบบนี้
ชื่อสินค้า           วันที่รับ-จ่าย     ยกมา        รับ        จ่าย        คงเหลือ
Product(A)          7/1/2013        0            10                        10
Product(A)          8/1/2013       10                         2              8
Product(A)        10/1/2013        8                          1              7
Product(A)        14/1/2013        7             4           1             10
Product(A)        16/1/2013       10                         4              6
Product(A)        22/1/2013        6             6                          12
Product(A)        23/1/2013       12                         5              7
Product(B)          8/1/2013        0             3           1              2
Product(B)        11/1/2013        2             2                           4
Product(B)        14/1/2013        4             5           6              3
Product(B)        16/1/2013        3             3                           6
Product(B)        21/1/2013        6             2                           8
ขอบพระคุณล่วงหน้าครับ

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

1 @R16175
ผมว่าประเด็นมันอยู่ที่หากเรายังใช้เทคนิคของการสร้างซับคิวรี่แล้วนำมาเปรียบเทียบค่ากับอีกตารางในทุกๆเรคคอร์ด มันเหมือนเป็นการบังคับให้โปรแกรมมันต้องอ่านทุกๆเรคคอร์ดอยู่ดี ถ้าดูจากโค๊ดเดิมคือ
(SELECT NZ(Sum(รับเข้า)) - NZ(Sum(จ่ายออก)) FROM Table1 AS B WHERE A.[วันที่รับ-จ่าย] > B.[วันที่รับ-จ่าย] AND A.ชื่อสินค้า = B.ชื่อสินค้า) AS ยกมา
ซึ่งถึงแม้ว่าคุณจะลดการประมวลผลด้วยการบันทึกยอด คงเหลือ เอาไว้เลย (ซึ่งจริงๆทำอย่างนี้ค่ามันจะไม่มีความยืดหยุ่น) มันก็อาจช่วยได้เล็กน้อยอ่ะครับ เพราะถึงไงมันก็ต้องอ่านทุกเรคคอร์ดอยู่ดี

OK แต่ถ้าคุณต้องการเก็บค่าในฟิลด์ คงเหลือ แบบ Fix เลย และคิดว่าไม่มีปัญหา ผมว่าฟิลด์ ยกมา คุณก็แค่ใช้สูตร เอาฟิลด์ จ่าย + คงเหลือ แล้ว ลบกับ ฟิลด์ รับ ก็ได้หนิครับ
ยกมา: (nz([จ่าย],0)+[คงเหลือ]) - nz([รับ],0)
2 @R16177
555 ผมก็ทำแบบนั้นใช้ไปก่อนอยู่ครับ แต่กะว่าจะให้ Query มันตรวจสอบอีกที
แล้วก็ลองผิดลองถูกอยู่ เผื่อทำได้ก่อนอาจารย์มาตอบครับ   
3 @R16178
ดังนั้น การทำลักษณะเป็นการสรุปแบบนี้ เราจะเลี่ยงการทำกับฐานข้อมูลทั้งหมด โดยจะพยายามออกแบบ scope เป็นระยะเวลาแทน เช่น เป็น เดือนๆ แล้วสรุปรายปี ก็นำยอดเดือนมาสรุปอีกที เพราะยังไงซะข้อมูลจะโตขึ้นเรื่อยๆ ซักวันก็ต้องมีปัญหา หากไม่ตัดยอดเป็นช่วงๆ
4 @R16179
ผิดอีกแล้ว จริงๆ ออกแบบเป็นปีนะครับ

ชื่อสินค้า               ยกมา        รับ        จ่าย        คงเหลือ
Product(A)            12                         5              7
Product(B)             6             2                           8

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