กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
489 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
ส่วรข้อมูลมี 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 วัน ได้หรือไม่ครับ
Time: 0.1189s