สอบถามวิธี Sum จากผลคุณที่ Query มันสามารถทำได้ไหมครับ


0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

04 ส.ค. 65 , 15:14:24
อ่าน 134 ครั้ง

arampong

เรียนอาจารย์ และสมาชิกทุกท่านครับ



จากรูปผมมี  Query1 มีฟิวส์ดังนี้ครับ
A-Mat   = ค่าตัวเลขตัวที่1
B-Mat   = ค่าตัวเลขตัวที่2
C-DATE = วันที่
D-TYPE = ชนิดของสินค้า
-------------------------
AxB = [A-Mat]*[B-Mat]

ความต้องการคือ อยากหาผลรวม AxB เพิ่มต่อท้ายแต่ละแถวเลยครับโดยที่ให้รวมใน Query1 นี้เลย
โดยผลรวมนี้มีเงื่อนไขคือ [AxB] ต้องเป็นวัน C-DATE และ D-TYPE เดียวกัน
คือในQuery1 นี้ถ้าผมกรุ๊ปมันก็จะได้รายการเดียวตรงตามเงื่อนไขครับ แต่ผมต้างการ
รายการแยกเหมือนเดิมแต่อยากได้ผลรวมต่อท้ายครับ
มันมีวิธีคิด และทำได้ไหมครับแบบนี้
ขอบคุณอาจารย์ไว้ล่วงหน้าครับ
ขอบคุณครับ



 

05 ส.ค. 65 , 09:33:47
ตอบกลับ #1

arampong

ลองศึกษาตัวอย่างในกระทู้ ผมลองทำ 2 วิธี
1.Inner join  (งงวิธีครับเลยผ่านครับ)
2.สร้าง Query ใหม่แล้วกรุ๊ป แล้วค่อย Dlookup ข้อมุลมาใช้ (เลือกทำตัวนี้ครับ)

วิธีทำของผมครับ
ผมได้ทดลองทำวิธี สร้าง Query2 อีกตัวหนึ่ง
ได้ทำการกรุ๊ปข้อมูลตามวันที่(C-Date) และชนิดสินค้า(D-TYPE)
และทำการ Sum Of AxB

แล้วทำการ Dlookup ที่ Query1  แต่ติดที่เงื่อนไขครับ
เพราะผมลอง
Test2: DLookUp("[Sum Of AxB]","Query2")   'ข้อมูลตัวแรกมาครับ

Test4: Nz(DLookUp("[Sum Of AxB]","Query2","D-TYPE = " & [D-TYPE] & " And  C-DATE = '" & [C-DATE] & "'"))   
ติดที่เงื่อนไขครับ รบกวนท่านอาจารย์ดูให้หน่อยครับ ตรงQuery1 ครับว่าจะเขียนCode ยังไงครับ
ผมแนบไฟร์มาด้วยครับ

ขอบคุณครับ

 

05 ส.ค. 65 , 09:46:21
ตอบกลับ #2

Un

ใช้ Running Sum ครับ ส่ง Query นี้มาให้หน่อยครับ

 
โพสต์นี้ได้รับคำขอบคุณจาก: arampong

05 ส.ค. 65 , 10:06:17
ตอบกลับ #3

arampong

SELECT Table1.ID, Table1.[D-TYPE], Table1.[A-Mat], Table1.[B-Mat2], Table1.[C-DATE], [A-Mat]*[B-Mat2] AS AxB
FROM Table1;

ขอบคุณครับ

 

05 ส.ค. 65 , 10:31:17
ตอบกลับ #4

Un

ผมส่งไฟล์ให้ไม่ได้ไม่รู้เป็นไร
ไม่เป็นไรทำตามนี้
1. เปลี่ยนชื่อฟิลด์จาก A-Mat เป็น A_Mat ใน Table1 นะครับ และทุกตัวให้ใช้ UnderScore แทน
2. เอาโคตนี้ไว้ใน Query1
SumAxB: (SELECT Sum([A_Mat]*[B_Mat2]) FROM Table1 AS q WHERE (((q.C_DATE)=[Table1].[C_DATE]) AND ((q.D_TYPE)=[Table1].[D_TYPE])))

ไม่รู้ว่าใช่แบบที่ต้องการรึป่าว ลองไปปรับดู
แบบนี้เรียก Running Sum ค้นหาในเวปได้มีเยอะ
เดี๋ยวสักพักจะลองอัพไฟล์อีกที

 

05 ส.ค. 65 , 10:32:31
ตอบกลับ #5

Un

ส่งใหม่

 

05 ส.ค. 65 , 10:40:07
ตอบกลับ #6

arampong

ขอบคุณมากครับ
ผมหาวิธีมา 1 อาทิตย์เต็มๆครับ ขอบคุณครับ
เดี๋ยวลองศึกษาตามอาจารย์แนะนำดูครับ Running Sum

เดี๋ยวจะกลับไปลองที่ไฟล์เดิมก่อน แล้วเข้ามาศึกษา Running Sum ครับ
ยังงงกับคำว่า Running Sum อยู่ครับ

ขอบคุณอาจารย์ครับผม

 

05 ส.ค. 65 , 16:20:22
ตอบกลับ #7

arampong

ขอสอบถามเพิ่มเติมครับ
จากตัวอย่างอาจารย์

หากว่า
หาก [A_Mat] อยู่ตาราง Table1
และ [B_Mat2] อยู่ตาราง Table2

SELECT Table1.IDA, Table1.D_TYPE, Table1.A_Mat, Table2.C_DATE, Table2.B_Mat2, Table2.IDA, Table2.IDB
FROM Table1 RIGHT JOIN Table2 ON Table1.IDA = Table2.IDA;

ต้องเขียนยังไงครับ
คือตันจริงๆครับ แปลงจากของเดิมที่อาจารย์แนะนำมาไม่ได้จริงๆครับ
ขอบคุณครับ
ของเดิมครับ
SumAxB: (SELECT Sum([A_Mat]*[B_Mat2]) FROM Table1 AS q WHERE (((q.C_DATE)=[Table1].[C_DATE]) AND ((q.D_TYPE)=[Table1].[D_TYPE])))

ต้องรบกวนอาจารย์อีกครั้งครับ
ขอบคุณครับ

 

05 ส.ค. 65 , 22:50:58
ตอบกลับ #8

arampong

ไม่ได้จริงๆครับ รบกวนท่านอาจารย์ช่วยอีกทีครับ
เข้าใจว่าน่าจะใช้  JOIN กันแต่ตอน Select ข้อมูลมาผมไม่ได้จริงๆครับ
รบกวนท่านอาจารย์อีกครั้งครับ ขอบคุณครับ
หาค่าที่ Query2 ครับ

SumAXB: (SELECT Table1.A_Mat AS Expr1, Table1.B_Mat AS Expr2, [Expr1]*[Expr2]
FROM Table1 RIGHT JOIN Table2 ON Table1.IDA = Table2.IDA)

 

05 ส.ค. 65 , 23:23:27
ตอบกลับ #9

sjs

แบบนี้ถูกไหมครับ


 

06 ส.ค. 65 , 08:52:47
ตอบกลับ #10

arampong

คำตอบอาจารย์ sjs ใช่ครับตรงผลรวม Sum
ถ้ากรุ๊ปข้อมูลก็จะได้ครับ
แต่ความต้องการคือต้องการรายการเป็นตัวๆเหมือนรูปที่ผมแนบมาครับ
แต่ให้ Running Sum ต่อเนื่องหากรายการเพิ่มเข้ามาในวันที่และชนิดเดียวกันครับ



ตอนแรกผมก็ทำการกรุ๊ปข้อมูลแบบนี้อีก Query ครับแล้วใช้ DLookup
แต่ติดตรงเงื่อนไข ไม่สำเร็จครับเลยสอบถามวิธีมา
อาจารย์ Un แนะนำ Running Sum ดูแล้วตอบโจทย์มากครับเลยทำตามครับ
แต่ที่ลองทำข้อมูลอยู่ตารางเดียว พอเป็นข้อมูล2ตารางผมไปต่อไม่ได้ครับ
ขอบคุณมากครับ ขอรบกวนอีกครั้งครับ

ขอบคุณครับ

 

07 ส.ค. 65 , 17:27:28
ตอบกลับ #11

arampong

เรียนอาจารย์
ผมลองผิดลองถูกได้แล้วครับ แต่มันดูแปลกๆครับ
คือผมทำดังนี้ครับ สร้าง Queryใหม่ขึ้นมาจาก Query เดิมครับที่ RIGHT JOIN
แล้วทำตามอาจารย์ Un แนะนำ โดยทำจากข้อมูลที่เป็นตารางเดียวกัน

SumAxB: (SELECT Sum([A_Mat]*[B_Mat2]) AS Expr1 FROM Query2 AS q WHERE (((q.C_DATE)=[Query2].[C_DATE]) AND ((q.D_TYPE)=[Query2].[D_TYPE])))

มันได้ตามความต้องการครับ
แต่เวลาผมใช้งาน มันเหมือนต้องเรียกใช้งานหลายตารางดูแปลกๆครับ
เราสามารถทำที่Query เดิมเลยได้ไหมครับโดย Select ข้อมูลมาคำนวณที่นี่เอา

ขอบคุณครับ

 

08 ส.ค. 65 , 10:12:56
ตอบกลับ #12

Un

ขอโทษครับเพิ่งกลับจากต่างจังหวัดมา
ตอบ
1. ถ้าฟิลด์อยู่คนละ Table ก็เอามา Join กันได้แล้วตั้งชื่อเป็น Query1 หรือที่ส่งมาใช้ชื่อทดสอบ
    *** งง ว่าทำไมต้อง Right Join ***
2. ตัวอย่างที่ส่งมาผิดตรง Join และการอ้างอิง
    พอทำ Running Sum เราสร้าง Query ทดสอบมาเพื่ออ้างอิงแล้ว
    ก็ใช้ Query ทดสอบมาเป็นตัวทำ ไม่ใช่ เอา Table1 Table2 มาทำ
    Query ก็จะหา ทดสอบ ไม่เจอ เกิดเป็นพารามิเตอร์ขึ้นมา

ลองทำบ่อยๆ ใช้ลองผิดลองถูกนี่แหละครับ ผมก็ใช้แบบนี้ ไม่ได้เรียนมาโดยตรง
อาจารย์ ในนี้ก็สอนมาอีกทีเหมือนกัน

 

08 ส.ค. 65 , 15:52:19
ตอบกลับ #13

arampong

ก่อนอื่นต้องขอขอบคุณอาจารย์ครับ
ไม่ต้องขอโทษครับ เป็นพระคุณอย่างสูงแล้วครับ
ผมต่างหากต้องขอโทษที่รบกวนอาจารย์หลายรอบครับ

จากคำตอบอาจารย์ผมพอจะเข้าใจการทำงานของ Query แล้วครับ
คือ ต้องมี Query หลักในการอ้างอิง แล้วหากจะใช้คำนวณ หรือหาค่า
ให้ใช้ Query ตัวหลักแตกออกไป ถึงว่าที่ผ่านมาผมทำที่ตัวหลัก
แล้วพอใช้โปรแกรมไป จะเกิดปัญหาบ่อยๆ เป็นที่การวาง
โครงสร้างการทำงานไม่ถูกต้องเหมือนที่อาจารย์แนะนำนี่เอง
ได้ความรู้ไปปรับปรุงอีกหลายตัวเลยครับ

ขอบคุณอาจารย์อีกครั้งครับ
ขอบคุณครับ

 


บอร์ดเรียนรู้ Access สำหรับคนไทย