QueryRunningSum
กระทู้เก่าบอร์ด อ.Yeadram

 1,310   4
URL.หัวข้อ / URL
QueryRunningSum

ลองอ่านตัวอย่างในบอร์ด หลายอันครับ งง
เลยอาจให้อาจารย์ช่วยลองทำตัวอย่างให้ดูครับ
ผลส่งไฟล์ชื่อ SampleRunningSum ไปที่บอร์ดครับ
ช่วยลองทำให้ดูหน่อยนะครับ

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

1 @R11706
SELECT Table1.dateSale, Table1.unit, (select sum(q.unit) from table1 as q where q.datesale <= table1.datesale) AS total
FROM Table1;
2 @R11707
อาจารย์ครับ ผมเข้าไปอ่านใน กระทู้อื่นที่ งง ก็ตรง q นี่แหละครับ
ไม่ทราบว่า q คืออะไรครับ ใช่ เป็นการสมมุติ table1 ให้ชื่อ q หรือเปล่าครับ
3 @R11711
การใช้ sub query หรือ คิวรี่ย่อย หรือ คิวรี่ซ้อนคิวรี่
ผมก็ไม่ค่อยรู้ลึกนัก แต่ก็พอทำได้ ตามความเข้าใจแบบ "ครูพักลักจำ" มาครับ

คิวรี่คือ กลุ่มข้อมูล ครับ หรือ แหล่งข้อมูล ซึ่ง 1 คิวรี่ก็ต้องถือว่า นั่นคือ แหล่งข้อมูล 1 ตัว
ในตัวอย่าง คิวรี่นี้ เราใช้แหล่งข้อมูลที่ 1 คือ ตารางชื่อ table1
แล้วใช้แหล่งข้อมูลที่ 2 คือ q

q เกิดจากไหน ก็เกิดจากคิวรี่เหมือนกันครับ เราสมมติว่าชื่อ q ดูได้จาก select sum(q.unit) from table1 as q

แม้ว่า q จะใช้แหล่งข้อมูลเดียวกันกับคิวรี่ตัวนอกก็ตาม คือ table1 แต่กลุ่มข้อมูลของ q ได้ถูกคัดสรรคัดกรองมาในอีกรูปหนึ่ง หรือในเงื่อนไขที่แตกต่างจากคิวรี่ตัวนอก ดังนั้นจึงถือได้ว่า q เป็นแหล่งข้อมูลที่ไม่เหมือนกับ table1

ในตัวอย่างนี้ ก็คือ เราเอา q กับ table1 มาทำงานร่วมกัน เกือบเหมือนการ join กันนั่นแหละครับ

สรุป q ในที่นี้ คือชื่อสมมติ (alias) ของคิวรี่ย่อย
-เราสามารถตั้งเป็นชื่ออื่นก็ได้ ตราบใดที่ยังไม่ละเมิดกฎการตั้งชื่อ
-หากเรามีคิวรี่ย่อยหลายตัว ใน statement เดียวกัน แต่ละคิวรี่จะตั้งมีชื่อไม่ซ้ำกัน
-ในการเขียน statement แบบซ้อนคิวรี่ (sub query) ทุกๆ การอ้างอิงฟิลด์ ควรหรือจำเป็นอย่างยิ่งที่ต้องระบุชื่อคิวรี่ไปด้วย เช่น แทนที่จะเขียนว่า select datesale เราก็ควรเขียนเป็น select table1.datesale หรือ select q.datesale คือต้องระบุแหล่งที่มาของฟิลด์ด้วยทุกครั้ง

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