กระทู้เก่าบอร์ด อ.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
ขอบพระคุณล่วงหน้าครับ
ชื่อสินค้า วันที่รับ-จ่าย รับ จ่าย คงเหลือ
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
2 @R16177
555 ผมก็ทำแบบนั้นใช้ไปก่อนอยู่ครับ แต่กะว่าจะให้ Query มันตรวจสอบอีกที
แล้วก็ลองผิดลองถูกอยู่ เผื่อทำได้ก่อนอาจารย์มาตอบครับ
แล้วก็ลองผิดลองถูกอยู่ เผื่อทำได้ก่อนอาจารย์มาตอบครับ
3 @R16178
ดังนั้น การทำลักษณะเป็นการสรุปแบบนี้ เราจะเลี่ยงการทำกับฐานข้อมูลทั้งหมด โดยจะพยายามออกแบบ scope เป็นระยะเวลาแทน เช่น เป็น เดือนๆ แล้วสรุปรายปี ก็นำยอดเดือนมาสรุปอีกที เพราะยังไงซะข้อมูลจะโตขึ้นเรื่อยๆ ซักวันก็ต้องมีปัญหา หากไม่ตัดยอดเป็นช่วงๆ
4 @R16179
ผิดอีกแล้ว จริงๆ ออกแบบเป็นปีนะครับ
ชื่อสินค้า ยกมา รับ จ่าย คงเหลือ
Product(A) 12 5 7
Product(B) 6 2 8
โอ้ย วันนี้เคียส พิมพ์ผิด พิมพ์ถูก
ชื่อสินค้า ยกมา รับ จ่าย คงเหลือ
Product(A) 12 5 7
Product(B) 6 2 8
โอ้ย วันนี้เคียส พิมพ์ผิด พิมพ์ถูก
Time: 0.3573s
(SELECT NZ(Sum(รับเข้า)) - NZ(Sum(จ่ายออก)) FROM Table1 AS B WHERE A.[วันที่รับ-จ่าย] > B.[วันที่รับ-จ่าย] AND A.ชื่อสินค้า = B.ชื่อสินค้า) AS ยกมา
ซึ่งถึงแม้ว่าคุณจะลดการประมวลผลด้วยการบันทึกยอด คงเหลือ เอาไว้เลย (ซึ่งจริงๆทำอย่างนี้ค่ามันจะไม่มีความยืดหยุ่น) มันก็อาจช่วยได้เล็กน้อยอ่ะครับ เพราะถึงไงมันก็ต้องอ่านทุกเรคคอร์ดอยู่ดี
OK แต่ถ้าคุณต้องการเก็บค่าในฟิลด์ คงเหลือ แบบ Fix เลย และคิดว่าไม่มีปัญหา ผมว่าฟิลด์ ยกมา คุณก็แค่ใช้สูตร เอาฟิลด์ จ่าย + คงเหลือ แล้ว ลบกับ ฟิลด์ รับ ก็ได้หนิครับ
ยกมา: (nz([จ่าย],0)+[คงเหลือ]) - nz([รับ],0)