เรียนถามการ RunningSum ใน Query โดยขึ้นกับชื่อ Record
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 432   16
URL.หัวข้อ / URL
เรียนถามการ RunningSum ใน Query โดยขึ้นกับชื่อ Record

   คือผมลองหาดูใน WEBBOARD เก่าแล้วไม่มีมีแต่ใกล้เคียงเช่น SELECT แต่จะต่างกันเล็กน้อย โดยลักษณะที่ต้องการเป็นดังนี้ครับ 
 
    ส่วรข้อมูลมี 2 field                               ผลลัพธ์ที่ต้องการ มี 3 field  
     ชื่อ       ค่า                                          ชื่อ       ค่า      ผลรวมย่อย 
      A         1                                            A         1              1    **** RESET 
      A         2                                            A         2              3     **** 1+2 
      A         3                                            A         3              6     **** 1+2+3 
      B         7                                             B         7              7    ***RESET  
      B         8                                             B         8              15   ***7+8  
      B         9                                             B         9              24   *** 7+8+9 
   ต้องการให้ QUERY ออกมาแล้วได้ผลลัพธ์ทางขวามือ ข้อความหลัง * เป็นคำอธิบายให้ทราบเพื่อความเข้าใจในคำถาม  
    หากเป็นไปได้ขอแบบง่ายๆหน่อยน่ะครับเพราะยังเขียน SQL ไม่เป็น 
    ขอบพระคุณล่วงหน้า 

chaiyao@shinee.com
*** Edited by Supap Chaiya *** 7/4/2546 15:01:48

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

1 @R01546
ลองดูจากตัวอย่างที่แนบไว้ข้างล่างนี้ครับ
2 @R01548
ขอบพระคุณครับ แต่ขอโทษอาจารย์ จริงๆครับเนื่องจากมีเพิ่มเติมคือหากมีวันที่มาเกี่ยวข้องแล้วต้องการให้มันหา RunningSum โดยเรียงตามวันที่ด้วย จะทำอย่างไรครับ ผมพยายามเพิ่มคำสั่ง ORDER BY เข้าไปแต่มันมี error ครับ ต.ย.ใหม่ดังนี้น่ะครับ ส่วรข้อมูลมี 2 field ผลลัพธ์ที่ต้องการ มี 3 field ชื่อ ค่า วันที ชื่อ ค่า วันที่ ผลรวมย่อย A 1 11/2 A 1 11 1 **** RESET A 2 13/2 A 3 12 4 **** 1+3 A 3 12/2 A 2 13 6 **** 1+2+3 B 7 15/2 B 9 13 9 *** RESET B 8 14/2 B 8 14 17 *** 9+8 B 9 13/2 B 7 15 24 *** 9+8+7 ขออภัยอาจารย์ด้วยน่ะครับที่ทำให้ต้องเสียเวลาอีกรอบ พอดีเป็นมือใหม่ครับ
3 @R01549
ของทราบประเภทของฟีลด์วันที่ด้วยครับว่าเก็บในรูปแบบไหนครับ เช่น อยู่ในรูปแบบของ Date/Time หรือในรูปแบบของ Text ธรรมดาครับ เพราะฟีลด์ที่จะใช้เรียงนี้จะมีบทบาทสำคัญในการ Sum ตรงนี้มาก
4 @R01552
รูปแบบวันที่ครับผมเป็น DATE/TIME
5 @R01553
ขออนุญาติอีกทีครับอาจารย์สรุปแล้ว field ชื่อ เป็น TEXT field ค่า เป็น NUMBER และ field วันที่เป็น DATE/TIME ครับผม
6 @R01555
ผมได้เพิ่มฟีลด์ชื่อ MyDate ลงไป แล้วกำหนดให้เป็นประเภท Date/Time แล้วก็ใส่วันที่ลงไป โดยให้เป็นแบบ Full Date คือมี พ.ศ. ด้วย จากกนั้นก็ให้เปลี่ยน SQL ของ Query1 ให้เป็นดังนี้ครับ SELECT Table1.MyName, Table1.MyDate, Table1.MyValue, (SELECT Sum(MyValue) FROM [Table1] AS Temp Where [Temp].[MyDate]<=[Table1].[MyDate] And [Temp].[MyName]=[Table1].[MyName]) AS [Running Sum] FROM Table1 ORDER BY Table1.MyName, Table1.MyDate;
7 @R01563
เรียน อ.สุภาพ ครับ ต้องขอรบกวนหน่อยครับ ผมลองเขียนตามที่อ.สอน มันมี error แจ้งว่า - ไวยากรณ์ของแบบสอบถามย่อยไม่ถูกต้อง ให้ใส่วงเล็บปีกกาให้กับแบบสอบถามย่อย **** ผมจึงลองใส่ดูโดยใส่ปิดหัวท้าย มันขึ้นว่า - You've written a subquery that can return more than one field without the EXIST reserved word in the main query's FROM clause Revise ther SELECT statement of the suvquery to request only one field. ****** Running (Sum: SELECT Table1.Myname, Table1.Mydate, Table1.Myvalue, (SELECT Sum(MyValue) FROM [Table1] AS Temp Where [Temp].[Mydate]<=[Table1].[Mydate] And [Temp].[MyName]=[Table1].[MyName]) AS [running sum] FROM Table1 Order BY Table1.Myname, Table1Mydate;) ******* ผมทำตรงไหนผิดครับ ผมใช้ OFFICE97 จะเกี่ยวมั้ยครับ ผมเลยส่งไฟล์ db1 มารบกวรอีกทีครับ
8 @R01564
เรียน อ.สุภาพ ขอโทษครับไฟล์ที่ส่งอยู่ที่นี่ครับ
9 @R01565
ให้เอา SQL ที่ผมให้ไปใส่ลงเลยครับ ไม่ต้องแก้ไขใดๆ ทั้งสิ้น ให้ลองทำดูก่อน ถ้าได้แล้วค่อยปรับเปลี่ยนที่หลังดูครับ
10 @R01566
ผลลัพธ์จะได้ MyName MyDate MyValue Running Sum a 11 February 2003 2 2 a 12 February 2003 1 3 a 13 February 2003 3 6 b 19 February 2003 9 9 b 20 February 2003 8 24 b 20 February 2003 7 24 b 21 February 2003 6 30
11 @R01567
เรียน อ.สุภาพ ที่เคารพ ผมพิมพ์ตามแล้วมันขึ้น error ครับว่าไวยากรณ์ไม่ถูกต้องครับ
12 @R01569
ไม่ต้องพิมพ์ครับ ให้ลากดำ แล้วกด Ctrl + C เพื่อคัดลอก แล้วเปิด Query1 จากนั้นให้ไปที่เมนู View>SQL View แล้วก็ให้ลากดำ SQL ตัวเดิมให้หมด แล้วกด Ctrl + V เพื่อวางส่วนที่คัดลอกมา คราวนี้ก็จะได้เองครับ
13 @R01570
เฮ้ ได้แล้วครับ กราบขอบพระคุณเป็นอย่างสูงเลยครับ เครียดมาอาทิตย์นึงแล้วครับ ขอบพระคุณจริงๆ ครับ เอ๊ะ แต่อาจารย์ครับข้อมูล B วันที่ 20/2/2546 ครั้งแรกมันควรจะได้ 17 ไม่ใช่หรือครับ
14 @R01571
ถ้าใน 1 วันสามารถมีได้หลายค่า จะต้องทำการรวมกันก่อนหรือไม่ครับ จากตัวอย่างที่ให้มาวันที่ 20 จะมี 2 ค่า ผมเลยได้เปลี่ยน SQL ใหม่ดังนี้ครับ SELECT Table1.MyName, Table1.Mydate, Sum(Table1.MyValue) AS SumOfMyValue, (SELECT Sum(MyValue) FROM [Table1] AS Temp Where [Temp].[MyDate]<=[Table1].[MyDate] And [Temp].[MyName]=[Table1].[MyName]) AS [Running Sum] FROM Table1 GROUP BY Table1.MyName, Table1.Mydate ORDER BY Table1.MyName, Table1.Mydate; จะได้ MyName Mydate SumOfMyValue Running Sum a 11 February 2003 2 2 a 12 February 2003 1 3 a 13 February 2003 3 6 b 19 February 2003 9 9 b 20 February 2003 15 24 b 21 February 2003 6 30
15 @R01572
เรียน อ.สุภาพ ครับ ถ้าไม่รวมกันจะได้ไหมครับ เพราะเวลาใช้งานจริงมันจะเป็นอย่างนี้เลยครับโดยจุดประสงค์คือต้องการให้แสดงรายละเอียดคำนวณบรรทัดต่อบรรทัดแบบนี้เลยเพื่อที่จะดูว่า Myvalue จะติดลบเมื่อไหร่
16 @R01577
เรียนอ.สุภาพ ครับ ขอรบกวนหน่อยน่ะครับ สุดท้ายแล้วไม่ทราบว่าหากไม่ให้รวมค่าใน 1 วัน ได้หรือไม่ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0664s