Sum ค่าจาก IIF ใน Query
กระทู้เก่าบอร์ด อ.Yeadram

 6,479   22
URL.หัวข้อ / URL
Sum ค่าจาก IIF ใน Query

อยาก sum ค่าที่ได้จากเงื่อนไขในหน้า query คับ เช่น
มีคอลัมน์ที่ 1 ใช้ iif เพื่อคำนวณแล้วแสดงค่าในคอร์ลัมน์นั้นๆ ซึ่งทีหลายแถว
อยากสร้างอีกคอลัมน์นึงเปนคอลัมน์ที่ 2 เพื่อเก็บค่าจากคอลัมน์ที่ใช้ iif แล้วก้อใช้ Sum เพื่อหาผลรวมทั้งคอลัมน์น่ะคับ


ช่วยแนะนำทีคับ ขอบคุณคับ

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

1 @R03195
คอลัมภ์ที่ 1                               คอลัมภ์ที่2
ผลของ iif คือ 2            |           sum(คอลัมภ์ที่1) คือ 9
ผลของ iif คือ 3            |           sum(คอลัมภ์ที่1) คือ 9
ผลของ iif คือ 4            |           sum(คอลัมภ์ที่1) คือ 9


ให้ออกมาเป็นอย่างนี้เหรอครับ
คิวรี่ ทำไม่ได้ครับ
2 @R03198
แล้วถ้าผมแยกเปนอีกคิวรี่นึง เพื่อเก็บเฉพาะผลรวมที่ได้จากคอลัมน์ 1 ล่ะคับ พอได้ไหมคับ
คือ แสดงเปนแถวเดียวน่ะคับ เปนค่า Sum ทั้งคอลัมน์ เปนอีกคิวรี่นึงได้ไหมคับ

3 @R03204
หรือว่าพอจะมีวิธีอื่นอีกไหมคับ เพื่อให้ได้ผลรวมทั้งหมดที่ได้จาก คอลัมน์ 1
4 @R03216
ไม่มีใครตอบได้เลยเหรอคับ..
5 @R03217
ลองยก ตย.ของผลลัพธ์ที่ต้องการแสดง ออกมาให้ดูหน่อยครับ
6 @R03219
คือจากที่คุณ yeadram ยกตัวอย่างมานะคับ

คอลัมภ์ที่ 1              
ผลของ iif คือ 2            
ผลของ iif คือ 3            
ผลของ iif คือ 4

สร้าง report เพื่อแสดงค่าจาก query

             คอลัมภ์ที่ 1
แถวที่1    2
แถวที่2    3
แถวที่3    4
            ผลรวม

ผมต้องการผลรวมที่ได้จากคอลัมน์ 1 ให้ได้ก่อนคับ ต่อไปก้อจะนำไปแสดงในหน้า report ตัวอื่นๆด้วย
จากที่ผมลอง Sum ดูมันบอกว่านิพจน์ซับซ้อนเกินไป ใช้ Sum ไม่ได้เลยคับ เลยไม่รู้ว่าจะใช้วิธีไหนดี

พอจะมีวิธีไหนบ้างคับ ใน access
7 @R03220
ถ้าจะเอาไปแสดงในรายงาน ก็ sum ในรายงานแทนเลย โดยในรายงานให้สร้าง group ของคอลัมน์ที่1 จากนั้นเลือกให้มี Group Footer   แล้วก็วาง textbox ลงไปในส่วนของ Group Footer   กำหนด Control Source ให้เป็นคอลัมน์ที่1 และกำหนด Running Sum เป็น Over Group   เท่านี้เองครับ

วันหลังควรบอกให้ครบถ้วนนะครับ การแสดงในรายงาน กับการหาค่า sum จากภายในคิวรี่เองเลย ทำอย่างนึงอาจง่ายกว่าทำอีกอย่างนึง
8 @R03221
sum จาก report ที่1 ได้แล้วคับ แต่ถ้าเราต้องการนำค่า Sum ที่ได้ใน textbox นี้ ไปแสดงใน report ที่ 2 ต้องทำไงเหรอคับ หรือว่าต้องมีการผ่านค่าอะไรหรือป่าวคับ
เพราะลองใช้ sum เหมือน report 1 แล้วมันฟ้องว่ารวมไม่ได้ ซับซ้อนเกินไป

รบกวนด้วยคับ..
9 @R03225
เอาคิวรี่ที่แสดงเป็น SQL Statement ของคุณมาให้ดูหน่อย
10 @R03226
SELECT tb_database.ID,tb_database.C_Item_Code, tb_database.C_Item_Name, tb_database.QPA, tb_database.Process_Cost, tb_database.Paint_Cost, IIf(([Process_Cost]=0 And [Paint_Cost]=0),"",IIf([Process_Cost]<>0,[Process_Cost]*[QPA],[Paint_Cost]*[QPA])) AS Prcssttcst, IIf(([Process_Cost]=0 And [Paint_Cost]=0),"",IIf([Process_Cost]<>0,[Process_Cost]*[QPA],[Paint_Cost]*[QPA])) AS GPrcssttcst

FROM tb_database

GROUP BY tb_database.ID,tb_database.C_Item_Code, tb_database.C_Item_Name, tb_database.QPA, tb_database.PM_Code, tb_database.Mat_Cost, tb_database.Process_Cost, tb_database.Paint_Cost, IIf(([Process_Cost]=0 And [Paint_Cost]=0),"",IIf([Process_Cost]<>0,[Process_Cost]*[QPA],[Paint_Cost]*[QPA])), IIf(([Process_Cost]=0 And [Paint_Cost]=0),"",IIf([Process_Cost]<>0,[Process_Cost]*[QPA],[Paint_Cost]*[QPA]));

ประมาณนี้คับ สิ่งที่ต้องการคือ ผลรวมที่ได้จาก GPrcssttcst คับ เพราะจะนำไปแสดงใน report คับ
11 @R03227
1) ทำไม Prcssttcst และ GPrcssttcst จึงมีสูตรเหมือนกัน
2) การ group ทำไมถึงมีการกรุ๊ปตาม iif( ... ) , iff( ... ) ด้วย ตรงนี้แปลกๆ
3) คิวรี่ที่หาผลรวม สามารถหาได้จาก

SELECT sum( iif( ... )) as SumGPrcssttcst FROM ... WHERE ... GROUP BY

WHERE จะมีหรือไม่ก็ได้ เพื่อกรองเอาเฉพาะเรคอร์ดที่ต้องการ

GROUP BY ไม่มีก็ได้ ถ้าเป็นผลรวมจากกลุ่มเดียว คือผลรวมเป็นค่าเดียว ไม่ใช่เป็นหลายค่าจากหลายกลุ่ม เพราะเท่าดูจากคำตอบ R03219 ก็ไม่ได้มีแยกกลุ่มอะไร

ถ้าคิวรี่ในข้อ 3) นี้ใช้ได้ ก็เอาผลจากคิวรี่นี้ไปแสดงในรายงานได้

ปัญหาของคุณคือ คุณ group ถูกหรือเปล่า หรือควรใช้ WHERE แล้วไม่ต้องมี GROUP BY กันแน่ ลองไปคิดดูครับ เพราะถ้าเขียนถูกแล้ว มันไม่ควรบอกว่าซับซ้อนเกินไป
12 @R03234
ที่ต้องทำ report 2ตัว เพราะว่า report ตัวแรกเปนฟอร์มย่อยน่ะคับ

report2_________________________
ส่วนหัวของรายงาน_________________
ส่วนหัวของกลุ่ม____________________

report1(เปนฟอร์มย่อย)

ส่วนท้ายของรายงาน________________

แสดงผลรวม(ที่ได้จากฟอร์มย่อย)

ประมาณนี้ีเลยคับ
คือใน report1 นั้น Sum ได้ค่าถูกต้องตามคิวรี่แล้วคับ query นี้ดึงข้อมูลจาก table_database คับ ใน report1 นั้น ใช้ Sum ได้ถูกต้อง แต่พอมาแสดงผลรวม report2 กลับเปนค่าเดิมที่เก็บในเทเบิลน่ะคับ มันไม่ตรงตาม report ที่ 1ที่ได้จากคิวรี่เลยคับ
13 @R03237
ตกลงคิวรี่ที่ผมแนะไปในข้อ 3) ทำได้หรือยังครับ
14 @R03260
ข้อ 3 ได้แล้วคับ ทำไงต่อคับ
15 @R03262
ถ้าได้แล้ว เราก็สร้างโค้ดข้างล่างนี้เพื่อดึงเอาผลลัพธ์ที่ได้มาแสดงในรายงาน โดยสร้างใน event procedure ของ Report Footer หรืออาจจะเป็น Page Footer หรือ Group Footer ก็แล้วแต่ที่คุณต้องการ และผมสมมุติให้ textbox ที่แสดงผลรวมชื่อว่า txtSumGPrcssttcst นะครับ


Private Sub ReportFooter_Format(Cancel As Integer, FormatCount As Integer)
   Dim RS as DAO.Recordset

   set RS = CurrentDB.OpenRecordset("SELECT ...... ") ' คือคิวรี่ในข้อ 3
   me.txtSumGPrcssttcst = RS!SumGPrcssttcst
   RS.Close : Set RS = Nothing
End Sub
16 @R03282
จากที่ผมลองทำดูแล้วคับ มันขึ้นว่า ค่าพารามิเตอร์น้อยเกินไปคับ ตรงแถว

set RS = CurrentDB.OpenRecordset("SELECT ...... ") นี้คับ

ทำไงต่อคับ รบกวนด้วยคับ

*ค่าที่ผม Sum ได้นั้นผม Sum ใน report 1 น่ะคับ ไม่ได้ sum ในคิวรี่
sum ในคิวรี่นัี้้นมันบอกนิพจน์ไม่ตรงกับเกณ คับ ผมก้อใช้ตาม
SELECT sum( iif( ... )) as SumGPrcssttcst FROM ... ที่คุณสันติสุขบอกมาเลยคับ แต่มันฟ้องตรงนิพจน์ไม่ตรงเกณคับ
17 @R03284
ถ้าภายในคิวรี่ SELECT sum( iif( ... )) as SumGPrcssttcst FROM ...มีเครื่องหมาย double quote (คือ ") อยู่ ให้เปลี่ยนเป็นเครื่องหมาย single quote (คือ ') ให้หมด แต่ถ้าทำแล้วยังไม่ได้ ช่วยแสดง SQL Statement เต็มๆของคิวรี่ที่คุณตอบว่าทำได้แล้วมาให้ดูหน่อย
18 @R03285
ค่าที่ผม sum ได้นั้น เปนแค่นิพจน์ที่ผมเขียนใน textbox ใน report 1 น่ะคับ
คือ =Sum(GPrcssttcst) มันก้อจะ sum ค่าได้เลย แต่ในคิวรี่นั้นกลับ sum ไม่ได้ตามต้องการ เพราะค่าที่ต้องการคือค่า ที่ sum จาก คิวรี่ ไม่ใช่ค่า sum จาก table
นิพจน์ที่ผมทำใน report1 นั้น ตรงตามความต้องการ แต่พอจะแสดงในอีก report2 ตรง ส่วนท้ายของรายงาน ไม่ได้ซะังั้นคับ
19 @R03286
ขอยืนยันคำพูดเดิมนะครับว่าให้เอา SQL Statement มาแสดงให้ดูครับ ไม่เช่นนั้นผมช่วยอะไรไม่ได้แล้วครับ
20 @R03287
SELECT tb_database.ID, tb_database.P_Category_Code, tb_database.P_Item_Code, tb_database.P_Item_Name, tb_database.Low_Level_No, tb_database.Seq_No, tb_database.C_Category_Code, tb_database.Low_Level, tb_database.Work_Center, tb_database.C_Item_Code, tb_database.C_Item_Name, tb_database.QPA, tb_database.PM_Code, tb_database.Mat_Cost, tb_database.Process_Cost, tb_database.Paint_Cost, IIf(([Process_Cost]=0 And [Paint_Cost]=0),"",IIf([Process_Cost]<>0,[Process_Cost]*[QPA],[Paint_Cost]*[QPA])) AS Prcssttcst, IIf(([Process_Cost]=0 And [Paint_Cost]=0),"",IIf([Process_Cost]<>0,[Process_Cost]*[QPA],[Paint_Cost]*[QPA])) AS GPrcssttcst, tb_database.Local_Prts_Cst, tb_database.Imprt_Prts_Cst, tb_database.Currency_Code, tb_database.Import_Avg, IIf([Local_Prts_Cst]=0 Or IsNull([Local_Prts_Cst]),"",[Local_Prts_Cst]*[QPA]) AS tt_Local, IIf([Import_Avg]=0 Or IsNull([Import_Avg]),"",[Import_Avg]*[QPA]) AS tt_Import, Sum(tb_database.tt_Local) AS SumOftt_Local, Sum(tb_database.tt_Import) AS SumOftt_Import
FROM tb_database
GROUP BY tb_database.ID, tb_database.P_Category_Code, tb_database.P_Item_Code, tb_database.P_Item_Name, tb_database.Low_Level_No, tb_database.Seq_No, tb_database.C_Category_Code, tb_database.Low_Level, tb_database.Work_Center, tb_database.C_Item_Code, tb_database.C_Item_Name, tb_database.QPA, tb_database.PM_Code, tb_database.Mat_Cost, tb_database.Process_Cost, tb_database.Paint_Cost, IIf(([Process_Cost]=0 And [Paint_Cost]=0),"",IIf([Process_Cost]<>0,[Process_Cost]*[QPA],[Paint_Cost]*[QPA])), IIf(([Process_Cost]=0 And [Paint_Cost]=0),"",IIf([Process_Cost]<>0,[Process_Cost]*[QPA],[Paint_Cost]*[QPA])), tb_database.Local_Prts_Cst, tb_database.Imprt_Prts_Cst, tb_database.Currency_Code, tb_database.Import_Avg, IIf([Local_Prts_Cst]=0 Or IsNull([Local_Prts_Cst]),"",[Local_Prts_Cst]*[QPA]), IIf([Import_Avg]=0 Or IsNull([Import_Avg]),"",[Import_Avg]*[QPA]);

นี่เลยคับ นี่เปนคิวรี่นะคับ
ส่วน report1 นั้นจะแสดง ค่าต่างๆจากคิวรี่นะคับ เหตุที่ผมใช้ group เพราะว่าข้อมูลของผมเปนกลุ่ม โดยมี P_Item_Code เป็นหลัก ประกอบด้วย C_Item_Code หลายๆตัว ผมต้องการให้คิวรี่ดึงออกมาให้เปนหมวดหมู่ ก้อเลย
group ไปหลายตัว แต่ตรง sum iif นั้นไม่รู้ว่าผมใช้ถูกหรือป่าวคับ หรือว่าผมควรจะใช้ iif ใน report1 เลยคับ

ตรงช่อง sum ค่า gprcssttcst นั้น คือต้องรวมค่า prcssttcst นั่นเองคับเปนค่าเดียวกัน ผมก้อเลย สร้าง textbox ชื่อ txt_GPrcssttcst เพื่อหาค่า sum แล้วผมก้อเขียนนิพจน์โดยให้ sum([GPrcssttcst]) มันก้อได้คับ

แล้วผมสร้าง report2 เพื่อเปนฟอร์มหลัก โดยส่วนรายละเอียดคือ report1 ที่เปนฟอร์มย่อย

สิ่งที่ต้องการคือ ส่วนท้ายของรายงาน report2 นั้น อยากให้โชว์ค่า sum([GPrcssttcst]) ออกมาให้ตรงกันคับ









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