การรวมยอดเงินต่างตาราง
กระทู้เก่าบอร์ด อ.Yeadram

 2,729   16
URL.หัวข้อ / URL
การรวมยอดเงินต่างตาราง

การรวมยอดเงินต่างตารางนั้นคือ

มียอดเงินเดิมใน ตาราง balance (เก็บยอดเงินประเภท A) เก็บยอดเงินในฟิลด์ Balance_Savings และต้องการนำยอดเงินนั้นมารวมกับยอดเงินในตาราง Transactions ในฟิลด์ Transaction_value ที่มีการทำรายการประเภท A ในฟิลด์ Transaction_Type_Id

เพื่อนำยอดเงินจากการรวมนั้นมาแสดงใน ตาราง balance (เก็บยอดเงินประเภท A) ในฟิลด์ Balance_Savings

หนูจะต้องทำอย่างไรคะ

รบกวนอาจารย์ด้วยค่ะ

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

1 @R15544
รบกวนอาจารย์ให้คำแนะนำเพื่อนำไปปรับใช้ในการทำระบบต่อไป
ขอบคุณค่ะ
2 @R15554
คำว่ามาแสดงในฟิลด์ Balance_savings คือ การรวมยอดเงินระหว่าง Balance_savings+Transaction_value แล้วนำมาเก็บที่ ฟิลด์ Balance_savings ในตาราง balance ใช่หรือไม่ ถ้าใช่ก็ ก็ประมาณนี้โดยการสร้างคิวรี่

1. สร้างคิวรี ชื่อ   qrytotal_A ( แบบสอบถามเลือกข้อมูล) เลือกตาราง Balance และ Transaction มา inner join กัน
SELECT Balance.Balance_type_A, Balance.Balance_savings, Trancaction.Transaction_value, [Balance_savings]+[Transaction_value] AS total
FROM Balance INNER JOIN Trancaction ON Balance.Balance_type_A=Trancaction.Transaction_type_Id;
ทดสอบดูก่อนว่าได้ยอดรวมถูกต้องตามที่ต้องการหรือเปล่าถ้าไม่ได้ก็ปรับเปลี่ยนคิวรี่ให้ถูกต้องก่อนไปข้อที่ 2

2. สร้างคิวรีปรับปรุงข้อมูลลงในฟิลด์ Balance_savings ชื่อ qryUadatebalance ( แบบสอบถามปรับปรุงข้อมูล) โดยเลือกตาราง Balance และ qrytotal_A มา inner join กัน
UPDATE Balance INNER JOIN qrytotal_A ON Balance.Balance_type_A = qrytotal_A.Balance_type_A SET Balance.Balance_savings = [total];

เสร็จแล้วลองทดสอบ run คิวรี่ qryUdatebalance ดูข้อมูลในฟิลด์ balance_savings จะเปลี่ยนตาม ยอด total
**** ก่อนทำการทดสอบอย่าลืมสำรองฐานข้อมูลไว้ด้วยเพื่อเกิดข้อผิดพลาดไม่สามารถเอากับคืนกลับมาไม่ได้
3 @R15557
หนูลองทำดูแล้วไม่ได้ คะ
มันจะรวมแบบแถวต่อแถวเลย

อาจารย์สะดวกที่จะดูข้อมูลมั้ยค่ะ
เดี๋ยวหนูจะส่งข้อมูลไปให้ดู

ขอบคุณคะ
4 @R15559
ผมไม่ใช่อาจารย์ครับ ที่แรกผมก็เข้ามาถามแบบคุณนี้แหละและก็เข้ามาศึกษาหาความรู้จาก Webborad นี้ได้ความรู้มากๆๆๆๆ ขอบคุณผู้ที่สร้าง web นี้ขึ้นมาและอาจารย์ท่านอื่นๆ สิ่งไหนที่ผมตอบได้ก็ตอบ ผมว่าตอบผ่านทาง Webboradนี้จะดีกว่าเพื่อมีอาจารย์และท่านอื่นที่มีความรู้มากกว่าช่วยตอบและก็เพื่อให้บุคคลอื่นๆที่ต้องการศึกษาลักษณะแบบคุณ ลองเขียนรายละเอียดของตารางมีฟิลด์อะไรมีข้อมูลอย่างและสิ่งที่ต้องการให้แสดงรายละเอียดพอคร่าวๆ ให้ดูหน่อย เช่น
ตาราง A
Id          type_A         จำนวน
1           A                  200
2     A          150
3     B          350
4     A          100
ตาราง B
Id          type_B         จำนวน
1           A                  200
2     A          120
3     B          350
4     A          50
สิ่งที่คุณต้องการเป็นอย่างไร
เป็นต้น
5 @R15563
ตาราง Balance (จะเก็บยอดเงินประเภท A)
Member_Id        Balance_Savings
1                             1000
2                             2000
3                             1500
4                             1000
5                             1200
-------------------------------------------------------------------------
ตาราง Share      (จะเก็บยอดเงินประเภท B)
Member_Id        Share_Value
1                             1100
2                             2100
3                             1100
4                             1000
5                             1200
-----------------------------------------------------------------------------
ตาราง Transaction    (จะข้อมูลการทำรายการทั้ง Aและ B)
Member_Id   Transaction_Type_Id   Transaction_Date   Transaction_value
1                      A                                  1/1/12                     100
2                      A                                  1/1/12                     200
1                      A                                  1/1/12                     100
3                      B                                  1/1/12                     300
2                      B                                  1/1/12                     500
1                      A                                  1/1/12                     1000
3                      B                                  1/1/12                     2000
2                      A                                  1/1/12                     100
-------------------------------------------------------------------------------

จากตาราง 3 ตารางนี้

หนูอยากได้ยอดรวมของสมาชิกแต่ละคน ในประเภท A ในTransaction_value ไปรวมกับยอดเงินเดิมที่เคยเก็บไว้ก่อนหน้านี้ในตาราง Balance และตาราง Share เพื่อให้ยอดเงินที่ได้แสดงในฟิลด์ของ Balance_Savings และ Share_Value ตามลำดับ

หนูจะต้องทำแบบสอบถามอย่างไรค่ะ เพื่อนำแบบสอบถามที่ได้ไปสร้างฟอร์มเพื่อแสดงยอดเงินทั้งหมดของแต่ละคน

ขอบคุณค่ะ ^___^
6 @R15564
ผมดูข้อมูลและตารางที่คุณให้มาผมว่า คุณไม่จำเป็นที่ต้องสร้างตาราง Balance และ Share เพื่อที่จะเก็บข้อมูลสะสมยอดรวมของแต่ละคนและแยกประเภทเลย คุณสามารถที่จะใช้ความสามารถของคิวรี่แสดงผลแทนตารางได้เลย ประมาณนี้นะครับ
1. สร้างคิวรี่ ชื่อ Share
SELECT Transaction.Member_ID, Sum(Transaction.Transaction_value) AS SumOfTransaction_value, Transaction.Transaction_Type_Id
FROM [Transaction]
GROUP BY Transaction.Member_ID, Transaction.Transaction_Type_Id
HAVING (((Transaction.Transaction_Type_Id)="B"));

2.สร้างคิวรี่ชื่อ Balance
SELECT Transaction.Member_ID, Sum(Transaction.Transaction_value) AS SumOfTransaction_value, Transaction.Transaction_Type_Id
FROM [Transaction]
GROUP BY Transaction.Member_ID, Transaction.Transaction_Type_Id
HAVING (((Transaction.Transaction_Type_Id)="A"));

ก็จะได้ยอดรวมแยกแต่ละประเภทตามที่ต้องการที่นี่เวลาคุณจะใช้ก็สามารถนำไปใช้กับฟอร์มได้
(ถ้าข้อมูลในตาราง BalanceและShare คุณไม่เยอะน่าจะนำข้อมูลไปเก็บไว้ที่ตาราง Transaction ดีกว่า)

7 @R15565
ไม่ได้อ่านคำถามนี้นะครับ แต่เห็นคำสั่ง SELECT statement แล้ว ผมเห็นว่ากรณีเงื่อนไขแบบนี้ ควรเปลี่ยนจากการระบุหลัง HAVING clause เป็นระบุหลัง WHERE clause จะถูกต้องกว่าครับ แม้ว่าจะได้ผลลัพธ์เหมือนกันก็ตาม
8 @R15566
คือ ระบบเดิม เค้ามีตาราง BalanceและShare อยู่ก่อนหน้าที่จะสร้าง ตารางตาราง Transactions จึงต้องการนำทั้ง ตาราง BalanceและShare มารวมกับการทำรายการในตาราง Transactions ค่ะ

หนูควรทำอย่างไรดี ค่ะ
9 @R15567
สร้างคิวรี่ใช้แทนตาราง Balance ( ยอดเงินรวมประเภท A)
1. สร้างคิวรี่ชื่อ qryBalance
SELECT Transaction.Member_ID, Sum(Transaction.Transaction_value) AS Total
FROM [Transaction]
WHERE (((Transaction.Transaction_Type_Id)="A"))
GROUP BY Transaction.Member_ID;
2. สร้างคิวรีชื่อ TotalBalance (แล้วแต่จะตั้งชื่ออะไร) โดยเลือกตาราง Balance และคิวรี่ qryBalance มาทำเชื่อมต่อแบบ RiGHT JOIN เพื่อในอนาคตข้อมูล Member_ID กลุ่ม Aในตาราง Transaction จะมากกว่าตารางBanlanc และต่อไปจะใช้ TotalBalance แทนตาราง Banlance ใช้ดูข้อมูล ไปทำฟอร์ม หรือรายงานแล้วแต่........
SELECT qryBalance.Member_ID, NZ([Balance_savings],0)+[Total] AS TotatBalance_savings
FROM Balance RIGHT JOIN qryBalance ON Balance.Member_ID = qryBalance.Member_ID;

สร้างคิวรี่แทนตาราง Share (ยอดเงินรวมประเภท B)
1.สร้างคิวรี่ชื่อ qryShare
SELECT Transaction.Member_ID, Sum(Transaction.Transaction_value) AS Total
FROM [Transaction]
WHERE (((Transaction.Transaction_Type_Id)="B"))
GROUP BY Transaction.Member_ID;
2.สร้างคิวรี่ชื่อ TotalShare (แล้วแต่จะตั้งชื่ออะไร) โดยเลือกตาราง Share และคิวรี่ qryShare มาทำเชื่อมต่อแบบ RiGHT JOIN เพื่อในอนาคตข้อมูล Member_ID กลุ่ม Bในตาราง Transaction จะมากกว่าตารางShare และต่อไปจะใช้ TotalShare แทนตาราง Share ใช้ดูข้อมูล ไปทำฟอร์ม หรือรายงานแล้วแต่........
ประมาณนี้ครับ
10 @R15568
โทษที่ครับ ก๊อปมาไม่หมด
สร้างคิวรี่ใช้แทนตาราง Balance ( ยอดเงินรวมประเภท A)
1. สร้างคิวรี่ชื่อ qryBalance
SELECT Transaction.Member_ID, Sum(Transaction.Transaction_value) AS Total
FROM [Transaction]
WHERE (((Transaction.Transaction_Type_Id)="A"))
GROUP BY Transaction.Member_ID;
2. สร้างคิวรีชื่อ TotalBalance (แล้วแต่จะตั้งชื่ออะไร) โดยเลือกตาราง Balance และคิวรี่ qryBalance มาทำเชื่อมต่อแบบ RiGHT JOIN เพื่อในอนาคตข้อมูล Member_ID กลุ่ม Aในตาราง Transaction จะมากกว่าตารางBanlanc และต่อไปจะใช้ TotalBalance แทนตาราง Banlance ใช้ดูข้อมูล ไปทำฟอร์ม หรือรายงานแล้วแต่........
SELECT qryBalance.Member_ID, NZ([Balance_savings],0)+[Total] AS TotatBalance_savings
FROM Balance RIGHT JOIN qryBalance ON Balance.Member_ID = qryBalance.Member_ID;

สร้างคิวรี่แทนตาราง Share (ยอดเงินรวมประเภท B)
1.สร้างคิวรี่ชื่อ qryShare
SELECT Transaction.Member_ID, Sum(Transaction.Transaction_value) AS Total
FROM [Transaction]
WHERE (((Transaction.Transaction_Type_Id)="B"))
GROUP BY Transaction.Member_ID;
2.สร้างคิวรี่ชื่อ TotalShare (แล้วแต่จะตั้งชื่ออะไร) โดยเลือกตาราง Share และคิวรี่ qryShare มาทำเชื่อมต่อแบบ RiGHT JOIN เพื่อในอนาคตข้อมูล Member_ID กลุ่ม Bในตาราง Transaction จะมากกว่าตารางShare และต่อไปจะใช้ TotalShare แทนตาราง Share ใช้ดูข้อมูล ไปทำฟอร์ม หรือรายงานแล้วแต่........
SELECT qryShare.Member_ID, Nz([Share_value],0)+[Total] AS TotalShare
FROM Share RIGHT JOIN qryShare ON Share.Member_ID = qryShare.Member_ID;
ประมาณนี้ครับ
11 @R15569
เพิ่มเติม
การทำ Left Join และ Light Join ต้องดูด้วยว่าข้อมูล Member_Id ในตาราง Transaction มีมากกว่าตาราง BalanceและShare หรือน้อยกว่า เพราะข้อมูลที่ได้อาจไม่ครบทุก Member_Id ดังนั้นเวลาเลือก Member_Idต้องเลือกตารางที่มากว่ากว่าจึงจะได้ข้อมูลถูกต้อง ส่วนคำตอบข้างบนผมคิดไว้อนาคตที่ต้องกรอกข้อมูลในตาราง Transaction อย่างเดี่ยว แต่ถ้าปัจจุบันข้อมูล Member_ID ตาราง BalanceและShareมากกว่า ก็ใช้ Left Join แทนและMember_Id ก็อ้างอิงจากฝั่งนี้แทนและ เพิ่ม Nz([Total],0) ด้วยเดี่ยวจะมีข้อมูลว่างเปล่าบาง ID
12 @R15573
ที่บอกมานั้น ทำได้ค่ะ แต่มันจะแสดงเฉพาะรายการที่อยู่ในตาราง Transaction
แต่หนูอยากให้ผลลัพท์ออกมารหัสสมาชิก
นั้นคือ
        ถ้ารหัสสมาชิกคนใดมียอดเงินในการทำรายการในตารางTransactionแล้ว
ให้ไป บวก กับยอดเงินในตารางBalance ในฟิวด์ Balance_savings
        แต่ถ้ารหัสสมาชิกคนใดไม่มียอดเงินในการทำรายการตารางTransaction แล้ว
ให้แสดงยอดเงินในตาราง Balance ในฟิวด์ Balance_savings ที่เคยมียอดคงเหลือเดิม

ดังนั้นข้อมูลจะแสดงรหัสสมาชิกทุกคน เพื่อนำข้อมูลเหล่านี้มาแสดงในฟอร์มเพื่อ
ทราบยอดเงินคงเหลือแต่ละประเภทของรหัสสมาชิกทุกคนคะ

รบกวนช่วยให้คำแนะนำด้วยค่ะ

ขอบคุณคะ ^____^
13 @R15574
ออ เพิ่งเห็นค่ะ

แต่พอแก้เป็น Left Join รหัสที่ไม่มีในตาราง Transaction
จะแสดงเป็นค่าว่างไป หนูควรทำอย่างไรให้ รหัสสมาชิกแสดงแทนที่จะเป็นค่าว่างค่ะ

และที่ว่า
Member_Id ก็อ้างอิงจากฝั่งนี้แทนและ เพิ่ม Nz([Total],0) ด้วยเดี่ยวจะมีข้อมูลว่างเปล่าบาง ID

หนูต้องไปเพิ่มเติมที่ส่วนไหนคะ

รบกวนด้วยคะ

ขอบคุณค่ะ ^___^
14 @R15575
นั้นแสดงว่าปัจจุบันตาราง Balanc และ Share มี Member_ID มากกว่า ตาราง Transaction
คิวรี่ TotalBalance
จาก qryBalance.Member_ID, NZ([Balance_savings],0)+[Total]
เปลี่ยนเป็น Balance.Member_ID, NZ([Balance_savings],0)+NZ([Total],0) แทน
และ Right Join เป็น Left Join แทน

คิวรี่ TotalShare
จาก qryShare.Member_ID, Nz([Share_value],0)+[Total]
เปลี่ยนเป็น Share.Member_ID, Nz([Share_value],0)+NZ([Total],0) แทน
และ Right Join เป็น Left Join แทน
15 @R15576
ได้แล้วคะ ขอบคุณมากคะ

และอยากทราบว่าทำไมพอเลือก คิวรี่ TotalBalance คิวรี่ TotalShare และ
คิวรี่ Member_Info มาสร้างฟอร์ม ถึงสร้างไม่ได้ จะมีหน้าต่างขึ้นมาเตือน คะ
16 @R15577
ได้แล้วคะ ขอบคุณทุกๆท่านมากค่ะ ^___^
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2923s