หาผลต่างจากตาราง2ตาราง
กระทู้เก่าบอร์ด อ.Yeadram

 2,123   5
URL.หัวข้อ / URL
หาผลต่างจากตาราง2ตาราง

ขอเรียนถามอาจารย์ดังนี้ครับ
หากต้องการเปรียบเทียบตาราง2ตารางซึ่งมี2ฟิลย์เหมือนกันคือP_IDและR_ID ต่างกัน1ฟิลย์คือ BK_PAYและDETAIL_PAY แต่จำนวน record ในตารางทั้งอาจเท่าหรือไม่เท่ากัน
ดังนี้
ตาราง TB1
P_ID     R_ID     BK_PAY
1     116     3
1     790     3
1     1029     4
1     1268     3
2     1296     10
2     1378     3
2     1784     4
2     1881     4
2     1957     10
3     2023     3
3     2149     4
3     2570     4
3     2580     2
3     2652     10
3     2808     2
3     3053     4

ตาราง TB2
P_ID     R_ID     DETAIL_PAY
1     116     3
1     790     3
1     1029     4
1     1268     3
1     1270     5
2     1296     10
2     1378     3
2     1784     2
2     1881     4
2     1957     10
3     2023     3
3     2149     4
3     2570     4
3     2652     10
3     2808     2
3     3053     4
3     3060     1
ความต้องการก็คือ
1.ต้องการหาR_ID ของ P_ID แต่ละรายการที่ตาราง TB1 มีแต่ตาราง TB2 ไม่มี หรือในทางกลับกัน หา R_ID ของ P_ID แต่ละรายการที่ตาราง TB1 ไม่มีแต่ตาราง TB2 มี และ
2. ต้องการหาR_ID ที่ทั้งสองตารางมีแต่ค่าของฟิลย์ BK_PAY ของตาราง TB1 ไม่เท่ากับฟิลย์ DETAIL_PAY
ผลลัทพ์ที่ต้องการคือ
P_ID     R_ID     BK_PAY     DETAIL_PAY
1     1270     0     5
2     1784     4     2
3     2580     2     0
3     3060     0     1
อยากจะขอคำแนะนำจากอาจารย์ ต้องทำยังไงครับ
รบกวนอาจารย์ด้วยนะครับ


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

1 @R10940
ตามความต้องการข้อที่ 1
Access มีวิซาร์ดช่วยสำหรับการสร้างคิวรี่แบบนี้ครับ ลองดูตามเมนูคำสั่งในกลุ่มคิวรี่ดูนะครับ

ตามความต้องการข้อ 2 พิมพ์ตกไปหรือเปล่า ผมเดาว่าจะเป็นประมาณนี้
"ต้องการหาR_ID ที่ P_ID ของทั้งสองตารางตรงกัน แต่ค่าของฟิลย์ BK_PAY ไม่เท่ากับฟิลย์ DETAIL_PAY"
สร้างคิวรี่เหมือนกันครับ (ไม่ทราบว่าใช้เวอร์ชั่นไหนอยู่) ถ้าเป็น Access เวอร์ชั่น 2000-2002-2003 (เวอร์ชั่นอื่นๆ ไม่คุ้นครับ ไม่แน่ใจว่าจะเหมือนกันหรือเปล่า)
- สร้างคิวรี่ใหม่ 1 ตัว
- เลือกตารางทั้งสองตาราง
- ใช้เม้าส์จับลากชื่อฟิลด์ P_ID ของตาราง TB1 ไปวางใส่ฟิลด์ P_ID ของ TB2 มันจะสร้างเส้นสัมพันธ์ถึงกัน
- ในส่วนแสดงผล ช่องที่ 1, ลากฟิลด์ R_ID จากตาราง TB1 ไปวาง
- ในส่วนแสดงผล ช่องที่ 2, ลากฟิลด์ P_ID จากตาราง TB1 ไปวาง
- ในส่วนแสดงผล ช่องที่ 3, ลากฟิลด์ BK_PAY ไปวาง และในบรรทัดเงื่อนไขของช่องนี้ ให้เขียนว่า <>DETAIL_PAY
- ในส่วนแสดงผล ช่องที่ 4 ลากฟิลด์ DETAIL_PAY ไปวาง
- สั่งบันทึกคิวรี่แล้วลองรันดูครับ
2 @R10945
เรียนอาจารย์ yeardrum ผมใช้ access version 2003 ครับ
กรณีแรก ความต้องการข้อที่ 1 ผมใช้แบบสอบถามแบบหาข้อมูลไม่ซ้ำทำได้แล้วครับ
แต่ ตามความต้องการข้อ 2 ความต้องการเป็นแบบที่อาจารย์เดาถูกแล้วครับ คือ ต้องการหาR_ID ที่ P_ID ของทั้งสองตารางตรงกัน แต่ค่าของฟิลย์ BK_PAY ไม่เท่ากับฟิลย์ DETAIL_PAY
ผมทำตามที่อาจารย์แนะนำ ดังภาพ

เมื่อรัน query แล้วผลลัทพ์ที่ได้ ดังภาพ ซึ่งยังไม่ได้ตามที่ต้องการ รบกวนอาจารย์ช่วยแนะนำด่อด้วยครับ
...
3 @R10946
ขอแก้ไขภาพแรกครับ
4 @R10953
ชักจะงงครับ กลับไปอ่านความต้องการใหม่อีกครับ และดูตัวอย่างข้อมูลของโจทก์แล้วยังไม่ค่อยแน่ใจเท่าไร เอาเป็นว่าขอแนะนำอย่างนี้ไปก่อน ไม่รู้จะตรงความต้องการหรือเปล่า

- ให้ลืมๆ วิธีทำข้อ 2 ที่ผมแนะนำไปเลยครับ
- ให้สร้างคิวรี่ตามวิธีที่ 1 (ใช้วิซาร์ดช่วยสร้าง) โดย..
1) สร้างคิวรี่ ที่มี ใน 1 แต่ไม่มีใน 2 (TB1 right join TB2)

select P_ID, R_ID, BK_Pay as BK, 0 As Detail
from tb1 right join TB2 on tb1.P_ID = tb2.P_ID
where tb2.R_ID is null;

เซฟเป็นคิวรี่ชื่อ qr_1_not_2

2) สร้างคิวรี่กลับทางกัน มาอีกตัว เซฟเป็นคิวรี่ชื่อ qr_2_not_1
Select P_ID, R_ID, 0 as BK, Detail_Pay as Detail
From tb2 right join tb1 on tb2.P_ID=tb1.P_ID
Where tb1.R_ID is null;

3) เอาคิวรี่ทั้งสอง มารวมกันด้วย Union ตั้งชื่อคิวรี่ใหม่ว่า qrUnionDiff
Select * from qr_1_not_2
UNION
Select * from qr_2_not_1;

4) สร้างคิวรี่ชุดสุดท้ายเพื่อจัดกลุ่มข้อมูล เซฟคิวรี่เป็น myQuery
Select P_ID, R_ID, sum(BK) as BK_Pay, sum(Detail) as Detail_Pay
From qrUnionDiff
Group by P_ID, R_ID
Order by P_ID, R_ID;

ลองรันดูครับ
ผลลัพธ์ที่คุณต้องการจะเห็นได้ในการรัน คิวรี่ตัวสุดท้ายนะครับ
แต่คิวรี่อีก 3 ตัวก่อนหน้านั้นมีความสำคัญทั้งหมด ห้ามลบเด็ดขาด ไม่งั้นคิวรี่ตัวสุดท้ายจะทำงานไม่ได้

ปล. คุณสามารถรวบทั้งหมดให้มาอยู่ในคิวรี่เดียวกันได้เลย ด้วยการใช้ sub query แต่อย่าเพิ่งเลยครับ เอาแบบยืดเยื้อนี้ก่อน เพื่อให้เข้าใจง่าย
5 @R10976
ต้องขอขอบคุณอาจารย์ yeadram มากๆเลยสำหรับความรู้ที่ได้
สำหรับความต้องการข้อ 2 ผมทำตามที่อาจารย์แนะนำแบบเดิม แต่ผมลองเปลี่ยนใช้เม้าส์จับลากชื่อฟิลด์ R_ID ของตาราง TB1 ไปวางใส่ฟิลด์ R_ID ของ TB2 แล้วลองรันดู ปรากฏว่าได้ตามความต้องการเลยครับ
ขอบคุณอาจารย์ yeadram มากๆ เลยครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3723s