สอบถามการ join Output ครับ



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

04 มิ.ย. 61 , 15:48:28
อ่าน 872 ครั้ง

prajak

สอบถามการ join Output ครับ
« เมื่อ: 04 มิ.ย. 61 , 15:48:28 »
จากรูปข้อมูลมีอยู่2ตาราง ผมต้องการให้ออก report โดย ให้ คลิ๊กdropdown เพื่อเลือกปี แล้ว output ของแต่ละรายการก็จะแสดงตามแต่ละเดือนครับ ลอง Union วันที่ของ2ตาราง แล้ว sum ทั้ง2 output ก็ไม่ได้ครับ 555 ผมนี่ถามปัญหาประมาณนี้หลายครั้งละ ก็มีอาจารย์และพี่ๆมาสอนตลอด พอต้องปรับใช้นิดหน่อยก็ไปไม่เป็นทุกทีครับ

 

04 มิ.ย. 61 , 21:19:32
ตอบกลับ #1

ปิ่นณรงค์

: สอบถามการ join Output ครับ
« ตอบกลับ #1 เมื่อ: 04 มิ.ย. 61 , 21:19:32 »
แบบใหม่เสร็จละครับ กดที่ form result แล้วเลือกปี จากนั้นรัน Report ดูครับ


โดยขั้นแรก สร้างคิวรี่ Union ก่อนใส่
โค๊ด: [Select]
SELECT Date, Output,  'POFab' as Source
FROM TblPOFab
UNION SELECT Date, Output,  'Production' as Source
FROM TblProduction;
จะได้ข้อมูลและชื่อตารางมา

ขั้นที่สอง
กำหนด Year: Year([Date]) เพื่อให้ได้เฉพาะปีมา
กำหนด MONTH: "เดือน" & Month([Date])  จะได้ "เดือน 1,2,3,4,5.......12"
ตรง OutPut ให้ Sum


ขั้นที่สาม

โค๊ด: [Select]
SELECT Sum1.Source, Sum(IIf([Month]="เดือน1",([output]))) AS เดือน1, Sum(IIf([Month]="เดือน2",([output]))) AS เดือน2, Sum(IIf([Month]="เดือน3",([output]))) AS เดือน3, Sum(IIf([Month]="เดือน4",([output]))) AS เดือน4, Sum(IIf([Month]="เดือน5",([output]))) AS เดือน5, Sum(IIf([Month]="เดือน6",([output]))) AS เดือน6, Sum(IIf([Month]="เดือน7",([output]))) AS เดือน7, Sum(IIf([Month]="เดือน8",([output]))) AS เดือน8, Sum(IIf([Month]="เดือน9",([output]))) AS เดือน9, Sum(IIf([Month]="เดือน10",([output]))) AS เดือน10, Sum(IIf([Month]="เดือน11",([output]))) AS เดือน11, Sum(IIf([Month]="เดือน12",([output]))) AS เดือน12
FROM Sum1
GROUP BY Sum1.Source, Sum1.Year
HAVING (((Sum1.Year)=[Forms]![Result]![getYears]));

Group by Source  ไว้แล้วกำหนดที่ละเดือนเพื่อให้เข้าเงื่อนไขและแสดงผลทั้ง 12 เดือน

ตัวอย่างด้านล่าง
« แก้ไขครั้งสุดท้าย: 04 มิ.ย. 61 , 22:27:16 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

04 มิ.ย. 61 , 21:27:38
ตอบกลับ #2

prajak

: สอบถามการ join Output ครับ
« ตอบกลับ #2 เมื่อ: 04 มิ.ย. 61 , 21:27:38 »
ผมเข้าไปดูแล้วครับ
1.กรณีข้อมูลยังไม่มีถึงเดือน7,8,9 เราสามารถสร้างฟอร์มหรือreportไว้รอเลยได้ไหมครับ เท่าที่ลอง ข้อมูลเดือนจะไม่วิ่งมาครับ
2.เราจะสร้างcombo box เพื่อกรองข้อมูลเป็นรายปีได้ยังไงครับ

ขอบคุณมากๆครับ

 

04 มิ.ย. 61 , 21:51:26
ตอบกลับ #3

ปิ่นณรงค์

: สอบถามการ join Output ครับ
« ตอบกลับ #3 เมื่อ: 04 มิ.ย. 61 , 21:51:26 »
ลองอันใหม่ด้านบนครับ สร้างเงื่อนไขไว้รองรับแล้ว
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

05 มิ.ย. 61 , 10:17:00
ตอบกลับ #4

prajak

: สอบถามการ join Output ครับ
« ตอบกลับ #4 เมื่อ: 05 มิ.ย. 61 , 10:17:00 »
ทำตามตัวอย่างได้แล้วครับ และถ้าเราต้องการ Source มากว่า2รายการที่ยกตัวอย่าง ก็ทำแบบเดียวกันเลยใช่มั้ยครับ

 

05 มิ.ย. 61 , 10:22:22
ตอบกลับ #5

ปิ่นณรงค์

: สอบถามการ join Output ครับ
« ตอบกลับ #5 เมื่อ: 05 มิ.ย. 61 , 10:22:22 »
ทำตามตัวอย่างได้แล้วครับ และถ้าเราต้องการ Source มากว่า2รายการที่ยกตัวอย่าง ก็ทำแบบเดียวกันเลยใช่มั้ยครับ
ใช่ครับ คุณ prajak กำหนดที่ Union อันเดียวพอ

SELECT Date, Output,  'POFab' as Source
FROM TblPOFab
UNION
SELECT Date, Output,  'Production' as Source
FROM TblProduction
UNION
SELECT ..............  'ตั้งชื่อ' as Source
FROM กำหนดTable;
กี่ตารางก็ได้คับ แต่ตอนจบ SQL เราค่อยใส่เครื่องหมาย ;  นะครับและ ไม่ต้องใส่ UNION ให้อันสุดท้ายนะครับ คิวรี่อื่นๆ กำหนดเหมือนเดิมครับ
« แก้ไขครั้งสุดท้าย: 05 มิ.ย. 61 , 10:24:16 โดย ปิ่นณรงค์ »
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

05 มิ.ย. 61 , 11:08:25
ตอบกลับ #6

prajak

: สอบถามการ join Output ครับ
« ตอบกลับ #6 เมื่อ: 05 มิ.ย. 61 , 11:08:25 »
ทำได้แล้วครับ ขอบคุณครับ

 

09 มิ.ย. 61 , 09:10:45
ตอบกลับ #7

prajak

: สอบถามการ join Output ครับ
« ตอบกลับ #7 เมื่อ: 09 มิ.ย. 61 , 09:10:45 »
ทำตามตัวอย่างได้แล้วครับ และถ้าเราต้องการ Source มากว่า2รายการที่ยกตัวอย่าง ก็ทำแบบเดียวกันเลยใช่มั้ยครับ
ใช่ครับ คุณ prajak กำหนดที่ Union อันเดียวพอ

SELECT Date, Output,  'POFab' as Source
FROM TblPOFab
UNION
SELECT Date, Output,  'Production' as Source
FROM TblProduction
UNION
SELECT ..............  'ตั้งชื่อ' as Source
FROM กำหนดTable;
กี่ตารางก็ได้คับ แต่ตอนจบ SQL เราค่อยใส่เครื่องหมาย ;  นะครับและ ไม่ต้องใส่ UNION ให้อันสุดท้ายนะครับ คิวรี่อื่นๆ กำหนดเหมือนเดิมครับ
ผมนำไปประยุุกต์ใช้กับงาน เจอปัญหาว่าหน้า report ผมอยากเอา source บางตัวมา+หรือ - กัน มันจะสามารถทำได้หรือเปล่าครับ ตามรูป


และนี่คือที่มาของ report ตามที่คุณปิ่นณรงค์สอนครับ






 

09 มิ.ย. 61 , 12:05:42
ตอบกลับ #8

ปิ่นณรงค์

: สอบถามการ join Output ครับ
« ตอบกลับ #8 เมื่อ: 09 มิ.ย. 61 , 12:05:42 »
ก่อนเอามา union สร้างคิวรี่ มา บวก หรือ ลบให้เสร็จก่อน แล้วเอาคิวรี่นั้นมา union กันคับเดี่ยว ไว้จะเพิ่มเติมให้นะครับ
:love: :grin:
 
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

10 มิ.ย. 61 , 11:59:49
ตอบกลับ #9

prajak

: สอบถามการ join Output ครับ
« ตอบกลับ #9 เมื่อ: 10 มิ.ย. 61 , 11:59:49 »
ขอบคุณครับ รบกวนด้วยนะครับ เดี๋ยวผมก็จะลองทำดู

 

11 มิ.ย. 61 , 01:14:59
ตอบกลับ #10

ปิ่นณรงค์

: สอบถามการ join Output ครับ
« ตอบกลับ #10 เมื่อ: 11 มิ.ย. 61 , 01:14:59 »

ได้ละครับ

ผมกำหนดข้อมูลโดยตั้งชื่อคิวรี่ตามนี้นะครับ

SELECT Date1, Output,  'ซื้อสุทธิ' as Source,'01' as Row
FROM TblPOFabquery
UNION
SELECT Date1, Output,  'วัตถุดิบต้นงวด' as Source, '02' as Row
FROM tblProductionQuery
UNION
SELECT Date1, Output,  'รวมวัตุดิบในการผลิต' as Source,'03' as Row
FROM sum2
UNION
SELECT Date1, Output,  'วัตถุดิบปลายงวด' as Source,'04' as Row
FROM TblMaterialEndQuery
UNION
SELECT Date1, Output,  '(1)วัตถุดิบที่ใช้ไป' as Source, '05' as Row
FROM sum4;

วิธีการหาผลรวมของ รวมวัตถุดิบที่ใช้ในการผลิต  เราแค่ Union ALL ตารางทั้งสองแล้ว Format date เอาเฉพาะเดือนแล้ว Group by แล้ว Sum
(ดู Query Sum2)
โค๊ด: [Select]
SELECT Date1, Output
FROM TblPOFabquery
UNION ALL SELECT Date1, Output
FROM TblProductionquery;

วิธีหาวัตุดิบที่ใช้ไป นำตารางวัตถุดิบปลายงวด(tblMaterialEndQuery) มา Group By แล้ว Sum ไว้ก่อน Format Date เอาแค่เดือนเหมือนเดิม ตั้งชื่อว่า Sum2_1
แล้วไปสร้างอีกคิวรี่นึง
กำหนดดังนี้
โค๊ด: [Select]
SELECT Sum2.Date1, Sum2_1.Output AS MaterialEnd, Sum2.OUTPUT AS MaterialSum, IIf(Not IsNull([MaterialEnd] And Not IsNull([MaterialSum])),[MaterialSUm]-[MaterialEnd],[MAterialSum]) AS [OUTPUT]
FROM Sum2_1 RIGHT JOIN Sum2 ON Sum2_1.Date1 = Sum2.Date1;
ก็จะได้ (1)วัตถุดิบที่ใช้ไป ครับ

« แก้ไขครั้งสุดท้าย: 11 มิ.ย. 61 , 01:42:22 โดย ปิ่นณรงค์ »
:love: :grin:
 

11 มิ.ย. 61 , 16:48:43
ตอบกลับ #11

prajak

: สอบถามการ join Output ครับ
« ตอบกลับ #11 เมื่อ: 11 มิ.ย. 61 , 16:48:43 »
ลองทำดูแล้วครับ ติดตรงที่(1)วัตถุดิบที่ใช้ไป ค่าไม่ถูกครับ ค่าอื่นถูกต้องหมด ไม่ทราบว่าQuery Sum3 และ TblMaterialเอาไปใช้ตอนไหนครับ ของผมคิดว่าน่าจะผิดตรงจุดนี้แหละครับ


 

11 มิ.ย. 61 , 18:11:56
ตอบกลับ #12

ปิ่นณรงค์

: สอบถามการ join Output ครับ
« ตอบกลับ #12 เมื่อ: 11 มิ.ย. 61 , 18:11:56 »
ใช้ คิวรี่ Sum3 จากตัวอย่างอันใหม่นะครับ
SELECT Sum2.Date1, Sum2_1.Output AS MaterialEnd, Sum2.OUTPUT AS MaterialSum, IIf(Not IsNull([MaterialEnd] And Not IsNull([MaterialSum])),[MaterialSUm]-[MaterialEnd],[MAterialSum]) AS [OUTPUT]
FROM Sum2_1 RIGHT JOIN Sum2 ON Sum2_1.Date1 = Sum2.Date1;

และตรง Union คิวรี่ แก้เป็น

SELECT Date1, Output,  'ซื้อสุทธิ' as Source,'01' as Row
FROM TblPOFabquery
UNION
SELECT Date1, Output,  'วัตถุดิบต้นงวด' as Source, '02' as Row
FROM tblProductionQuery
UNION
SELECT Date1, Output,  'รวมวัตุดิบในการผลิต' as Source,'03' as Row
FROM sum2
UNION
SELECT Date1, Output,  'วัตถุดิบปลายงวด' as Source,'04' as Row
FROM TblMaterialEndQuery
UNION SELECT Date1, Output,  '(1)วัตถุดิบที่ใช้ไป' as Source, '05' as Row
FROM sum3;

ที่จริงจากอันเก่าใช้คิวรี่ Sum4 สำหรับผลของ (1)วัตถุดิบที่ใช้ไป ซึ่งอันใหม่ผมลบ คิวรี่ Sum3 แล้วแก้ชื่อคิวรี Sum4 เป็น Sum3 แทน
« แก้ไขครั้งสุดท้าย: 11 มิ.ย. 61 , 18:20:59 โดย ปิ่นณรงค์ »
:love: :grin:
 

12 มิ.ย. 61 , 11:54:08
ตอบกลับ #13

prajak

: สอบถามการ join Output ครับ
« ตอบกลับ #13 เมื่อ: 12 มิ.ย. 61 , 11:54:08 »
ทำได้แล้วครับ


แต่Query Sum3 ของผมถ้าเหมือนของคุณปิ่นณรงค์ผลลัพธ์มันจะไม่ได้ครับ ก็ไม่เข้าใจเหมือนกัน เลยใส่เป็นแบบนี้ครับ งงครับลองตั้งนาน



อันนี้ตัวอย่างของคุณปิ่นณรงค์


 

12 มิ.ย. 61 , 16:36:01
ตอบกลับ #14

ปิ่นณรงค์

: สอบถามการ join Output ครับ
« ตอบกลับ #14 เมื่อ: 12 มิ.ย. 61 , 16:36:01 »
คิวรี่ sum2_1ที่ผมทำตัวอย่างผ่านการ Sumมาแล้ว จาก คิวรี่ก่อนหน้า พอมาถึง Sum3ก็ไม่ต้องSum อีกคับ
« แก้ไขครั้งสุดท้าย: 12 มิ.ย. 61 , 19:38:36 โดย ปิ่นณรงค์ »
:love: :grin:
 


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