ต้องการหาผลต่างของแต่ละ Record ครับ
กระทู้เก่าบอร์ด อ.Yeadram

 1,554   4
URL.หัวข้อ / URL
ต้องการหาผลต่างของแต่ละ Record ครับ

Table1 มีข้อมูลต่อไปนี้
Record     Mat     Qty
3     C     200
3     A     250
2     B     150
2     A     200
1     C     320
1     B     250
1     A     300

ผมอยากสร้าง query ที่เอา Record ที่มากกว่า มาลบ Record ที่น้อยกว่าในอันดับต่อไป แยกตาม Mat ครับ ก็จะได้ออกมาประมาณนี้ครับ

Record     Mat     Qty     Diff
3     C     200     200
3     A     250     50
2     B     150     100
2     A     200     100
1     C     320     320
1     B     250     250
1     A     300     300

โดยคำตอบทำ ABS ทั้งหมดเลยครับ

ขอบคุณทุกคำตอบครับ

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

1 @R01204
"เอา Record ที่มากกว่า มาลบ Record ที่น้อยกว่า"

รู้ได้ไงว่าเรคคอร์ดไหนมากกว่า?? ดูจากอะไร??
แล้วเอาอะไรไปลบอะไร?
เอา C ไปลบ 200 มันไม่มีผลลัพธ์นะครับ

มันมี ทั้งหมด 7 เรคคอร์ด จะเอาเรคคอร์ดที่ 1 ไปลบเรคคอร์ดที่เท่าไหร่บ้าง แล้วเรคคอร์ดที่ 7 จะไปลบกับเรคคอร์ดไหน

คำถามไม่ชัดเจนครับ
2 @R01206
คงใช้ ชื่อ Field ที่ทำให้สับสนครับ
ขอเปลี่ยนคำว่า Record เป็น Doc แล้วกันนะครับ

มีข้อมูลประมาณนี้ ขอลดข้อมูลเหลือข้อมูลให้เป็นรูปแบบง่าย ๆ นะครับ

Doc      Mat     Qty
3           A     250
2           A     200
1           A     300

คำตอบที่ได้ก็ประมาณนี้ครับ

Doc Mat     Qty     คำตอบ
3     A        250     50     (เอา Qty ของ Doc 3 Mat A ไปลบกับ Qty ของ Doc 2 Mat A)
2     A        200     100   (เอา Qty ของ Doc 2 Mat A ไปลบกับ Qty ของ Doc 1 Mat A)
1     A        300     300   (ไม่มี Doc ที่น้อยกว่า Doc 1 คำตอบก็ให้ใช้ Qty ของ Doc นั้นเลยครับ)

ขอบคุณครับ
3 @R01211
Select T1.Doc, T1.Mat, T1.Qty, Abs(T1.Qty - Nz( ( Select T2.Qty from T as T2 where (T2.Mat = T1.Mat) and (T2.Doc = (Select Max(T3.Doc) from T as T3 where (T3.Mat = T1.Mat) and (T3.Doc < T1.Doc) ) )) ,0)) from T as T1 order by T1.Doc Desc, T1.Mat

อาจดูซับซ้อนสักหน่อย ค่อยๆไล่ไปนะครับ

(1) Select Max(T3.Doc) from T as T3 where (T3.Mat = T1.Mat) and (T3.Doc < T1.Doc) ส่วนนี้เพื่อหา เลขลำดับ ที่มากที่สุด ที่น้อยกว่าเลขที่กำลังประมวลผล เช่นถ้ากำลังประมวลผลเรคอร์ดที่มีเลข Doc = 3 ผลลัพธ์ก็จะให้เลข Doc = 2 ออกมา

(2) Select T2.Qty from T as T2 where (T2.Mat = T1.Mat) and (T2.Doc = ... ส่วนนี้ก็หา Qty จากเรคอร์ดที่มี Doc เท่ากับเลขที่หาได้จาก Sub Query ที่ (1)

(3) Select T1.Doc, T1.Mat, T1.Qty, Abs(T1.Qty - Nz( ... ส่วนนี้แสดงผลต่างของ Qty ที่กำลังประมวลผลกับ Qty ที่ได้จาก Sub Query ที่ (2)
4 @R01229
อื้อหือ

ท่าทางต้องทำความเข้าใจอีกเยอะเลยครับ
ซ้อนกัน 3 รอบเลย

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