กระทู้เก่าบอร์ด อ.Yeadram
1,686 9
URL.หัวข้อ /
URL
รบกวนสอบถามเรื่องฟังก์ชั่น DSum
รบกวนสอบถามค่ะ ต้องการหาผลรวมสะสมทีละวันโดยสะสมไปเรื่อยๆ จนกว่าจะไม่มีข้อมูล
แต่ลองเขียนQuery ดูแล้ว คอลัมน์ CumCondy ผลรวมสะสมไม่ต่อเนื่องกันพอเริ่มเดือนใหม่ก็จะสะสมผลรวมใหม่ ไม่เอาผลรวมสะสมของเดือนที่แล้วมาคำนวณด้วย ไม่ทราบว่าจะแก้ไขอย่างไรดีคะให้สามารถหาผลรวมสะสมทั้งหมดของ AT-01โดยสะสมทีละวันไปเรื่อยๆ
ตย. ที่เขียนค่ะ
DSum("Cony","DAILY_PROD","DatePart('d', [SDATE])<=" & [FDate] & " And DatePart('m', [SDATE]) = " & [AMonth] & " And DatePart('yyyy',[SDATE]) =" & [AYear] & " And NAME='" & [NAME] & "'" & "") AS CumCondy
NAME SDATE FDate AMonth AYear Condy CumCondy
AT-01 21-Apr-08 21 4 2008 0.484 0.484
AT-01 22-Apr-08 22 4 2008 1.089 1.573
AT-01 23-Apr-08 23 4 2008 0.497 2.07
AT-01 24-Apr-08 24 4 2008 1.635 3.705
AT-01 25-Apr-08 25 4 2008 1.626 5.331
AT-01 26-Apr-08 26 4 2008 1.572 6.903
AT-01 27-Apr-08 27 4 2008 1.568 8.471
AT-01 28-Apr-08 28 4 2008 1.614 10.085
AT-01 29-Apr-08 29 4 2008 0 10.085
AT-01 30-Apr-08 30 4 2008 1.248 11.333
AT-01 01-May-08 1 5 2008 2.504 2.504
AT-01 02-May-08 2 5 2008 0.325 2.829
AT-01 03-May-08 3 5 2008 0.079 2.908
AT-01 04-May-08 4 5 2008 1.929 4.837
AT-01 05-May-08 5 5 2008 0.793 5.63
ขอบคุณล่วงหน้าค่ะ
แต่ลองเขียนQuery ดูแล้ว คอลัมน์ CumCondy ผลรวมสะสมไม่ต่อเนื่องกันพอเริ่มเดือนใหม่ก็จะสะสมผลรวมใหม่ ไม่เอาผลรวมสะสมของเดือนที่แล้วมาคำนวณด้วย ไม่ทราบว่าจะแก้ไขอย่างไรดีคะให้สามารถหาผลรวมสะสมทั้งหมดของ AT-01โดยสะสมทีละวันไปเรื่อยๆ
ตย. ที่เขียนค่ะ
DSum("Cony","DAILY_PROD","DatePart('d', [SDATE])<=" & [FDate] & " And DatePart('m', [SDATE]) = " & [AMonth] & " And DatePart('yyyy',[SDATE]) =" & [AYear] & " And NAME='" & [NAME] & "'" & "") AS CumCondy
NAME SDATE FDate AMonth AYear Condy CumCondy
AT-01 21-Apr-08 21 4 2008 0.484 0.484
AT-01 22-Apr-08 22 4 2008 1.089 1.573
AT-01 23-Apr-08 23 4 2008 0.497 2.07
AT-01 24-Apr-08 24 4 2008 1.635 3.705
AT-01 25-Apr-08 25 4 2008 1.626 5.331
AT-01 26-Apr-08 26 4 2008 1.572 6.903
AT-01 27-Apr-08 27 4 2008 1.568 8.471
AT-01 28-Apr-08 28 4 2008 1.614 10.085
AT-01 29-Apr-08 29 4 2008 0 10.085
AT-01 30-Apr-08 30 4 2008 1.248 11.333
AT-01 01-May-08 1 5 2008 2.504 2.504
AT-01 02-May-08 2 5 2008 0.325 2.829
AT-01 03-May-08 3 5 2008 0.079 2.908
AT-01 04-May-08 4 5 2008 1.929 4.837
AT-01 05-May-08 5 5 2008 0.793 5.63
ขอบคุณล่วงหน้าค่ะ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R14075
ขอบคุณค่ะสำหรับคำแนะนำ ลองทำตามดูแล้วค่ะแต่ผลรวมสะสมยังไม่ถูกต้องค่ะ
1. วันที่ไม่มีข้อมูล (Condy) แต่มีผลรวมสะสม
2. วันที่ 1 ของเดือนถัดไปก็ยังไม่เอายอดรสะสมของเดือนที่แล้วมาสะสมด้วยค่ะ
NAME SDATE Condy CumComdy
AT-01 03-Apr-08 0 0
AT-01 04-Apr-08 0 0
AT-01 05-Apr-08 0 16.17
AT-01 06-Apr-08 0 74.227
AT-01 07-Apr-08 0 110.201
AT-01 08-Apr-08 0 155.848
AT-01 09-Apr-08 0 178.314
AT-01 10-Apr-08 0 178.314
AT-01 11-Apr-08 0 178.314
AT-01 12-Apr-08 0 178.314
AT-01 13-Apr-08 0 0
AT-01 21-Apr-08 0.484 0.484
AT-01 22-Apr-08 1.089 1.573
AT-01 23-Apr-08 0.497 2.07
AT-01 24-Apr-08 1.635 3.705
AT-01 25-Apr-08 1.626 5.331
AT-01 26-Apr-08 1.572 6.903
AT-01 27-Apr-08 1.568 8.471
AT-01 28-Apr-08 1.614 10.085
AT-01 29-Apr-08 0 10.085
AT-01 30-Apr-08 1.248 11.333
AT-01 01-May-08 2.504 0
AT-01 01-May-08 0.325 0
มีวิธีอื่นไหมคะที่จะหาผลรวมสะสมของ AT-01 แบบทีละวัน ตอนนี้ที่คิดได้คือการใช้ DSum
ขอบคุณนะค่ะสำหรับคำตอบ
1. วันที่ไม่มีข้อมูล (Condy) แต่มีผลรวมสะสม
2. วันที่ 1 ของเดือนถัดไปก็ยังไม่เอายอดรสะสมของเดือนที่แล้วมาสะสมด้วยค่ะ
NAME SDATE Condy CumComdy
AT-01 03-Apr-08 0 0
AT-01 04-Apr-08 0 0
AT-01 05-Apr-08 0 16.17
AT-01 06-Apr-08 0 74.227
AT-01 07-Apr-08 0 110.201
AT-01 08-Apr-08 0 155.848
AT-01 09-Apr-08 0 178.314
AT-01 10-Apr-08 0 178.314
AT-01 11-Apr-08 0 178.314
AT-01 12-Apr-08 0 178.314
AT-01 13-Apr-08 0 0
AT-01 21-Apr-08 0.484 0.484
AT-01 22-Apr-08 1.089 1.573
AT-01 23-Apr-08 0.497 2.07
AT-01 24-Apr-08 1.635 3.705
AT-01 25-Apr-08 1.626 5.331
AT-01 26-Apr-08 1.572 6.903
AT-01 27-Apr-08 1.568 8.471
AT-01 28-Apr-08 1.614 10.085
AT-01 29-Apr-08 0 10.085
AT-01 30-Apr-08 1.248 11.333
AT-01 01-May-08 2.504 0
AT-01 01-May-08 0.325 0
มีวิธีอื่นไหมคะที่จะหาผลรวมสะสมของ AT-01 แบบทีละวัน ตอนนี้ที่คิดได้คือการใช้ DSum
ขอบคุณนะค่ะสำหรับคำตอบ
3 @R14078
ไม่เข้าใจครับ
ที่มา ที่ไป - ใช้ที่ไหน เป็น Form, Report
อะไรเป็นตัวกำหนดข้อมูล - มี table อื่นที่เกี่ยวข้องนอกจากนี้หรือไม่
ทำไม่มีข้อมูลที่วันที่ซ้ำกัน - สรุปว่าอะไรเป็น key ของ table หรือ ของ Query ที่ต้องการ ...
???
ที่มา ที่ไป - ใช้ที่ไหน เป็น Form, Report
อะไรเป็นตัวกำหนดข้อมูล - มี table อื่นที่เกี่ยวข้องนอกจากนี้หรือไม่
ทำไม่มีข้อมูลที่วันที่ซ้ำกัน - สรุปว่าอะไรเป็น key ของ table หรือ ของ Query ที่ต้องการ ...
???
4 @R14080
ขอโทษค่ะอธิบายไม่ละเอียด
มีตารางเดียวค่ะ ชื่อ DAILY_PROD และ key ในตารางคือ NAME กับ SDATE ค่ะ ข้อมูล คือ Condy
ต้องการหาผลรวมสะสมของ Condy โดยมีเงื่อนไขว่า สะสมเฉพาะชื่อที่เหมือนกันและสะสมตามวันลงมาเรื่อยๆ โดยการเขียน Query ค่ะ
ที่ทำไปคือการใช้ Dsum แต่ยังไม่ถูกค่ะ ไม่รู้ว่ามีวิธีอื่นนอกจาก Dsum หรือเปล่า
ตัวอย่างข้อมูลค่ะ
NAME SDATE Condy
AT-01 01-May-08 2.504
AT-01 02-May-08 0.325
AT-01 03-May-08 0.079
AT-01 04-May-08 1.929
AT-01 05-May-08 0.793
AT-01 06-May-08 0
AT-01 07-May-08 0
AT-01 08-May-08 0
AT-01 09-May-08 2.995
AT-01 10-May-08 2.046
AT-02 01-May-08 7.336
AT-02 02-May-08 6.969
AT-02 03-May-08 6.512
AT-02 04-May-08 6.674
AT-02 05-May-08 7.576
AT-02 06-May-08 6.888
AT-02 07-May-08 6.794
AT-02 08-May-08 4.798
AT-02 09-May-08 5.712
AT-02 10-May-08 4.973
AT-01 01-May-08 2.504
ขอบคุณ และ ขอโทษอีกครั้งค่ะ
มีตารางเดียวค่ะ ชื่อ DAILY_PROD และ key ในตารางคือ NAME กับ SDATE ค่ะ ข้อมูล คือ Condy
ต้องการหาผลรวมสะสมของ Condy โดยมีเงื่อนไขว่า สะสมเฉพาะชื่อที่เหมือนกันและสะสมตามวันลงมาเรื่อยๆ โดยการเขียน Query ค่ะ
ที่ทำไปคือการใช้ Dsum แต่ยังไม่ถูกค่ะ ไม่รู้ว่ามีวิธีอื่นนอกจาก Dsum หรือเปล่า
ตัวอย่างข้อมูลค่ะ
NAME SDATE Condy
AT-01 01-May-08 2.504
AT-01 02-May-08 0.325
AT-01 03-May-08 0.079
AT-01 04-May-08 1.929
AT-01 05-May-08 0.793
AT-01 06-May-08 0
AT-01 07-May-08 0
AT-01 08-May-08 0
AT-01 09-May-08 2.995
AT-01 10-May-08 2.046
AT-02 01-May-08 7.336
AT-02 02-May-08 6.969
AT-02 03-May-08 6.512
AT-02 04-May-08 6.674
AT-02 05-May-08 7.576
AT-02 06-May-08 6.888
AT-02 07-May-08 6.794
AT-02 08-May-08 4.798
AT-02 09-May-08 5.712
AT-02 10-May-08 4.973
AT-01 01-May-08 2.504
ขอบคุณ และ ขอโทษอีกครั้งค่ะ
5 @R14086
1. รวมยอดเฉพาะที่ Name เหมือนกัน
2. รวมเฉพาะเดือนเดียวกัน (ปีก็น่าปีเดียวกันด้วยถูกไหม)
วิธีทำ ที่นึกออกคือการจำลองตารางขึ้นมาเปรียบเทียบกัน
- สร้างคิวรี่ใหม่เปล่าๆ ขึ้นมา
- นำโค๊ดนี้ใส่ในหน้า SQL View
SELECT A.Name, A.SDATE, A.AMonth, A.AYear, A.Condy, (SELECT Sum(B.Condy) FROM DAILY_PROD AS B WHERE ((B.AMonth =
A.AMonth) and (B.AYear = A.AYear) and (B.Name = A.Name) AND (B.SDATE <= A.SDATE))) AS CumCondy
FROM DAILY_PROD AS A;
- Run ดูครับว่าได้ตามที่ต้องการหรือไม่
2. รวมเฉพาะเดือนเดียวกัน (ปีก็น่าปีเดียวกันด้วยถูกไหม)
วิธีทำ ที่นึกออกคือการจำลองตารางขึ้นมาเปรียบเทียบกัน
- สร้างคิวรี่ใหม่เปล่าๆ ขึ้นมา
- นำโค๊ดนี้ใส่ในหน้า SQL View
SELECT A.Name, A.SDATE, A.AMonth, A.AYear, A.Condy, (SELECT Sum(B.Condy) FROM DAILY_PROD AS B WHERE ((B.AMonth =
A.AMonth) and (B.AYear = A.AYear) and (B.Name = A.Name) AND (B.SDATE <= A.SDATE))) AS CumCondy
FROM DAILY_PROD AS A;
- Run ดูครับว่าได้ตามที่ต้องการหรือไม่
6 @R14088
แต่ถ้าต้องการรวมสะสมที่ Name เหมือนกันอย่างเดียว
ก็เอาเงื่อนไข
((B.AMonth = A.AMonth) and (B.AYear = A.AYear) ออก
จะได้เป็น
SELECT A.Name, A.SDATE, A.aMonth, A.AYear, A.Condy, (SELECT Sum(B.Condy) FROM DAILY_PROD AS B WHERE (B.name = A.name) AND (B.SDATE <= A.SDATE)) AS CumCondy FROM DAILY_PROD AS A;
ลองปรับใช้ดูครับ
ก็เอาเงื่อนไข
((B.AMonth = A.AMonth) and (B.AYear = A.AYear) ออก
จะได้เป็น
SELECT A.Name, A.SDATE, A.aMonth, A.AYear, A.Condy, (SELECT Sum(B.Condy) FROM DAILY_PROD AS B WHERE (B.name = A.name) AND (B.SDATE <= A.SDATE)) AS CumCondy FROM DAILY_PROD AS A;
ลองปรับใช้ดูครับ
7 @R14089
ขอบคุณค่ะ ยังไม่ค่อยเข้าใจหลักการเท่าไหร่ แต่ลองทำแล้วรันออกมา ยังไม่ใช่ตามที่ต้องการ กำลังปรับแก้อยู่ค่ะ
ยกตัวอย่างที่ต้องการ ตามลัมน์ CumCondy
ถ้าวันนี้เป็นวันที่ 1/6/2008 ก็ Sumสะสม ตั้งแต่ 1-3 /5/2008 และ 1/6/2008 ของ AT-01 จะได้ 3.908 Sumสะสมแบบนี้ทุกวันจนกว่าข้อมูลของ AT-01 จะหมด
แล้วถึงไปเริ่ม Sum สะสมของ AT-02 ใหม่
NAME SDATE Condy CumCondy
AT-01 01-May-08 2.504 2.504
AT-01 02-May-08 0.325 2.829
AT-01 03-May-08 0.079 2.908
AT-01 01-Jun-08 1.000 3.908
AT-01 02-Jun-08 0.502 4.41
AT-02 01-May-08 7.336 7.336
AT-02 02-May-08 6.969 14.305
AT-02 03-May-08 6.512 20.817
AT-02 01-Jun-08 2.500 23.317
AT-02 02-Jun-08 1.600 24.917
ขอบคุณทุกคนมากๆค่ะ เด๊๋ยวจะลองปรับแก้แล้วรันใหม่ดูค่ะ
ยกตัวอย่างที่ต้องการ ตามลัมน์ CumCondy
ถ้าวันนี้เป็นวันที่ 1/6/2008 ก็ Sumสะสม ตั้งแต่ 1-3 /5/2008 และ 1/6/2008 ของ AT-01 จะได้ 3.908 Sumสะสมแบบนี้ทุกวันจนกว่าข้อมูลของ AT-01 จะหมด
แล้วถึงไปเริ่ม Sum สะสมของ AT-02 ใหม่
NAME SDATE Condy CumCondy
AT-01 01-May-08 2.504 2.504
AT-01 02-May-08 0.325 2.829
AT-01 03-May-08 0.079 2.908
AT-01 01-Jun-08 1.000 3.908
AT-01 02-Jun-08 0.502 4.41
AT-02 01-May-08 7.336 7.336
AT-02 02-May-08 6.969 14.305
AT-02 03-May-08 6.512 20.817
AT-02 01-Jun-08 2.500 23.317
AT-02 02-Jun-08 1.600 24.917
ขอบคุณทุกคนมากๆค่ะ เด๊๋ยวจะลองปรับแก้แล้วรันใหม่ดูค่ะ
8 @R14090
งั้นมันก็น่าจะเป็นแบบ R14088 คือ
SELECT A.Name, A.SDATE, A.aMonth, A.AYear, A.Condy, (SELECT Sum(B.Condy) FROM DAILY_PROD AS B WHERE (B.name = A.name) AND (B.SDATE <= A.SDATE)) AS CumCondy FROM DAILY_PROD AS A;
ไม่ถูกหรือครับ
SELECT A.Name, A.SDATE, A.aMonth, A.AYear, A.Condy, (SELECT Sum(B.Condy) FROM DAILY_PROD AS B WHERE (B.name = A.name) AND (B.SDATE <= A.SDATE)) AS CumCondy FROM DAILY_PROD AS A;
ไม่ถูกหรือครับ
9 @R14170
ลองทำตามคุณ TTT บอกแล้ว ทำได้แล้วค่ะ แต่ใช้เวลานานในการดึงข้อมูล
ขอบคุณ คุณTTT มากๆเลยค่ะ ได้ความรู้ใหม่ด้วย
ขอบคุณ คุณTTT มากๆเลยค่ะ ได้ความรู้ใหม่ด้วย
Time: 0.2949s
ตรง Month และ Year ใช้เครื่องหมาย = หมายความว่าต้องตรงเดือน+ตรงปี
เท่ากับว่า Sum ตามเดือน
สิ่งที่แนะนำคือ
มี SDate อยู่แล้ว ที่จริงก็ไม่น่าจะแยก FDate, AMonth, AYear ออกมาอีก - ผลที่ตามมาคือ กรณีของคุณสับสนว่าจะใช้ field ใดในการ query ซึ่งที่ถูกแล้วให้ SDate ได้เลย
สรุปใช้ตามนี้ครับ
DSum("Condy","DAILY_PROD","SDATE<= #" & [SDate] & "# And NAME='" & [NAME] & "'") as CumCondy