sum ใน Quary
กระทู้เก่าบอร์ด อ.Yeadram

 3,237   14
URL.หัวข้อ / URL
sum ใน Quary

ผมต้องการหาผมรวมของ Support   แต่ไม่สามารถทำได้มันจะฟ้อง Query is too complex. โดยผมสร้าง Quary 53Support โดยมี Quary 52Process มาประกอบร่วมอยู่ด้วย แต่ผม sum ของ sumProcess: (select sum(Process) from 52Process) ได้แล้ว แต่พอผ่านการคำนวนจนได้ชื่อ Support แล้วจะ Sum อีกรอบกับไม่ได้

ข้อมูลที่ใช้

53Support

sec_id
sec_code
sec_name
Process     ( =52Process )
sumProcess: (select sum(Process) from 52Process)
SumSupport: SumOfsec_bring1
Support: (([Process]/[sumProcess])*[SumSupport])+[Process]

ขอบคุณครับ

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

1 @R02397
อ่านแล้วไม่เข้าใจ แต่อย่างไรก็ตาม การหา Sum ของ Sum อีกที ดูมันจะไม่สมเหตุสมผลที่จะต้องมาทำ 2 ขั้นตอนอย่างนั้น ทำไมคิวรี่ไม่ join 52Process กับ 53Support ให้เรียบร้อยพร้อมกับหาค่า Sum ไปในตัวภายในขั้นตอนเดียวเลยหล่ะครับ
2 @R02399
ปล. ต้องเขียนว่า Query นะครับ ไม่ใช่ Quary
3 @R02400
ขอบคุณสำหรับคำแนะนำครับ   แต่พอจะมีวิธีที่จะทำการ Sum 2 ขั้นตอน ได้หรือเปล่าครับ คือผมจะเอาข้อมูลมา join กันได้อย่างครับ คือผมจำเป็นต้องเอาค่าที่มีการ Sum หลายชั้นใน Query ด้วยสิครับ


ขอบคุณครับ
4 @R02401
ลอง SQL ที่ว่าให้ดูหน่อย
5 @R02412
SELECT [52Process].sec_id, [52Process].sec_code, [52Process].sec_name, [52Process].Process, [52Process].sec_codeLine, (select sum(Process) from 52Process) AS sumProcess, [53Qsum_Suport].SumOfsec_bring1 AS SumSupport, [53Qsum_Indirect].SumOfsec_bring1 AS SumIndirect, (([Process]/[sumProcess])*[SumSupport])+[Process] AS Support
FROM 53Qsum_Suport, 53Qsum_Indirect, 52Process
ORDER BY [52Process].sec_id;


SQL ครับ ผมต้องการหาผลรวมของ (([Process]/[sumProcess])*[SumSupport])+[Process] AS Support   อีกรอบครับ


ขอบคุณครับ
6 @R02413
FROM 53Qsum_Suport, 53Qsum_Indirect, 52Process

คุณหามาจาก 3 เทเบิลโดยที่ไม่มีการ join ความสัมพันธ์กันเลยหรือ มันไม่น่าจะถูกต้องแล้ว
7 @R02414
คือผมไปทำการ sum เพื่อเอายอดรวมของ 2 เทเบิล 53Qsum_Suport, 53Qsum_Indirect เพื่อเอาคำนวน ก็เลยไม่ได้ join กัน แล้วอย่างนี้ผมต้องแก้ไขอย่างดีครับ


ขอบคุณครับ
8 @R02417
คืออย่างนี้นะครับ เพราะผมไม่รู้ว่า เทเบิลทั้งหลายนี้ออกแบบอย่างไร และมีความสัมพันธ์กันอย่างไร แม้แต่คุณเอง ก็ยังดูเหมือนงงๆว่าเทเบิลต่างๆมันสัมพันธ์กันอย่างไร จึงบอกไม่ได้ว่า จะต้องแก้ไขอย่างไร แต่ถ้าคุณรู้ว่ามันสัมพันธ์กันด้วยฟิลด์อะไร คุณก็เชื่อมโยงฟิลด์เหล่านั้น เช่น อาจจะสัมพันธ์กันด้วย Sec_ID เป็นต้น คุณลองค่อยๆคิดว่าทั้ง 3 เทเบิลมีฟิลด์อะไรบ้าง และมันเชื่อมกันด้วยฟิลด์ไหนกันแน่

อีกอย่างเท่าที่ผมดู คุณหา select sum(Process) from 52Process) AS sumProcess แล้วจะเอาค่า SumProcess ไปใช้ใน (([Process]/[sumProcess])*[SumSupport])+[Process] AS Support อีกที ตรงนี้จะเห็นว่า sumProcess นั้นมีค่าคงที่เสมอ ผมว่าอาจจะง่ายกว่าถ้าคุณเขียนเป็นโปรแกรมร่วมด้วยเพื่อหาค่า sumProcess เสียก่อน แล้วค่อยนำค่าที่ได้ไปสร้างเป็นคำสั่ง SQL เพื่อหาผลลัพธ์สุดท้ายอีกที
9 @R02420
ขอบคุณครับที่ให้คำแนะนำ   ผมงงตรงนี้ครับ ( sumProcess นั้นมีค่าคงที่เสมอ ผมว่าอาจจะง่ายกว่าถ้าคุณเขียนเป็นโปรแกรมร่วมด้วยเพื่อหาค่า sumProcess เสียก่อน ) คือผมยังไม่เข้าใจครับ ช่วยอธิบายให้ผมอีกนิดครับ


ขอบคุณครับ
10 @R02421
เพราะ select sum(Process) from 52Process ไม่มีเงื่อนไข where อะไรเลย ดังนั้นแต่ละเรคอร์ดที่ผ่านการทำงานจากคิวรี่หลักในครั้งนึงๆ   ก็จะให้ผล Sum ของฟิลด์ Process จากทุกเรคอร์ดในเทบิล 52Process เสมอครับ มันก็ย่อมกลายเป็นค่าคงที่ที่เหมือนๆกัน ... แต่ไม่ได้หมายความว่า คุณสั่งคิวรี่หลักทำงานครั้งที่หนึ่ง แล้วต่อมาสั่งทำงานอีกครั้ง มันจะได้เหมือนกันนะครับ มันอาจจะไม่เหมือนกันก็ได้ขึ้นกับข้อมูลมีการเปลี่ยนแปลงอะไรไปบ้าง ... ดังนั้น ถ้าเราสร้างคิวรี่ด้วยการเขียนโปรแกรม คุณก็จะได้คิวรี่เป็นลักษณะนี้

SELECT
[52Process].sec_id,
[52Process].sec_code,
[52Process].sec_name,
[52Process].Process,
[52Process].sec_codeLine,
ค่าคงที่ AS sumProcess,
[53Qsum_Suport].SumOfsec_bring1 AS SumSupport,
[53Qsum_Indirect].SumOfsec_bring1 AS SumIndirect,
(([Process]/ค่าคงที่)*[SumSupport])+ค่าคงที่ AS Support
...
...
...

ซึ่งมันจะทำงานได้เร็วกว่ากันมาก และอ่านทำความเข้าใจได้ง่ายขึ้น
11 @R02422
คำว่า ค่าคงที่ ผมต้องเขียน SQL อย่างไรครับ ถึงจะได้ค่าคงที ผมต้องแก้ไข SQL ของผมอย่างไรดีครับ ผมเหมือนจะเข้าใจ แต่เขียนคำสั่งไม่ถูกครับ

SELECT
[52Process].sec_id,
[52Process].sec_code,
[52Process].sec_name,
[52Process].Process,
[52Process].sec_codeLine,
(select sum(Process) from 52Process) AS sumProcess,
[53Qsum_Suport].SumOfsec_bring1 AS SumSupport,
[53Qsum_Indirect].SumOfsec_bring1 AS SumIndirect,
(([Process]/[sumProcess])*[SumSupport])+[Process] AS Support

FROM 53Qsum_Suport, 53Qsum_Indirect, 52Process
ORDER BY [52Process].sec_id;

ขอบคุณครับ
12 @R02423
ก็คือแทนส่วนที่ผมเขียนว่า "ค่าคงที่" ในคำตอบก่อนหน้านี้ด้วยตัวเลขไปเลยไงครับ เพียงแต่คุณต้องไปหาค่านั้นมาก่อน เช่น

SELECT
[52Process].sec_id,
[52Process].sec_code,
[52Process].sec_name,
[52Process].Process,
[52Process].sec_codeLine,
100 AS sumProcess,
[53Qsum_Suport].SumOfsec_bring1 AS SumSupport,
[53Qsum_Indirect].SumOfsec_bring1 AS SumIndirect,
(([Process]/100)*[SumSupport])+100 AS Support
...
...
...


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


13 @R02425
คุณสันติสุขครับ ค่าคือได้มาจากการ (select sum(Process) from 52Process) AS sumProcess, มันอาจจะมีการเปลี่ยนแปลง เราจะใส่ค่า 100 ไปเลยคงจะไม่ได้ เพราะเราต้องหาผลรวมและเปลี่ยนแปลง ไปตาม[52Process].Process,



ขอบคุณครับ

14 @R02426
อย่างที่ผมอธิบายในคำตอบ (R02421) แล้วไงครับว่า เพราะ (select sum(Process) from 52Process) AS sumProcess มันไม่มีส่วนที่เป็น where มันก็จะไม่เปลี่ยนแปลงสิครับ

ถ้ามันไม่ตรงตามจุดประสงค์ที่ต้องการ ก็แปลว่าคิวรี่คุณเขียนผิดแล้ว ส่วนอะไรคือสิ่งที่ถูกนั้น ขึ้นกับว่าคุณจะอธิบายได้ละเอียดหรือไม่ เพราะมีแต่คุณเท่านั้นที่เข้าใจระบบงานและความต้องการทั้งหมด อย่างเช่นที่เขียนว่า "เพราะเราต้องหาผลรวมและเปลี่ยนแปลงไปตาม[52Process].Process" คำว่า "เปลี่ยนแปลง" หมายถึงอย่างไร คุ??ต้องอธิบายให้ละเอียด
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2717s