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

 4,200   22
URL.หัวข้อ / URL
RunningSum CrosstabQuery

ข้อมูลผมเป็นแบบนี้
เดือน     จำนวน
10          500
10          600
11        1500
12          750
1            450
1            350
พอทำ CrosstabQuery จะได้แบบนี้
เดือน >> 10       11       12       1       2............9
             1100   1500    750    800     0

ที่อยากได้คือ ให้ข้อมูลมันรวมไปในแต่ละเดือน
เดือน >> 10       11       12       1       2............9
             1100   2600   3350   4150    4150

มันแนวทางการทำอย่างไรได้บ้างครับ เช่นไปกำหนดที่ คุณสมบัติ ตรงไหนได้ หรือใช้สูตรอะไร ฟังชันอะไรครับ

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

1 @R12710
select distinct t1.[เดือน], (select sum(t1.[จำนวน]) from table as t2 where t2.[เดือน] >= t1.[เดือน]) from table as t2 order by t1.[เดือน]

ถ้าเทเบิลของคุณมีเดือนและปีด้วย และต้องการผลรวมเฉพาะจำนวนในปีนั้น เงื่อนไขต้องเปรียบเทียบปีด้วยนะครับ
2 @R12711
แก้ไข

select distinct t1.[เดือน], (select sum(t2.[จำนวน]) from table as t2 where t2.[เดือน] >= t1.[เดือน]) from table as t1 order by t1.[เดือน]
3 @R12714
อ.สันติสุข ครับ
1.โค๊ตที่อาจารย์ให้มา ผมต้อง ไปทำ Crosstab อีกชั้นใช่มั้ยครับ
2.เดือนที่เป็นตัวเริ่มของผมคือ เดือน 10 แต่พอ order by t1.[เดือน] มันจะเริ่มจาก เดือน 1 สามารถกำหนดใน Query เลยได้หรือไม่ครับ ให้เริ่มจาก 10
4 @R12715
1. ใช่ครับ
2. เปลี่ยนเป็น

SELECT DISTINCT (t1.[เดือน]+2) Mod 12 AS Expr1, t1.[เดือน], (select sum(t2.[จำนวน]) from table as t2 where ((t2.[เดือน]+2) Mod 12) >= ( (t1.[เดือน]+2) Mod 12)) AS Expr2
FROM table AS t1
ORDER BY (t1.[เดือน]+2) Mod 12
5 @R12716
แก้ไข

เปลี่ยนจากเครื่องหมาย มากกว่า เป็น น้อยกว่า ด้วยนะครับ
6 @R12745
ขอโทษครับอาจารย์ ไปแข่งกีฬามา เพิ่งได้ลองทำวันนี้
มัน Error ตรง
select sum(t2.[จำนวน]) from table as t2 where ((t2.[เดือน]+2) Mod 12) >= ( (t1.[เดือน]+2) Mod 12))
ก็เลยลองนับวงเล็บ เห็นว่ามันขาดไป เลยลองเติมเอง แต่ก็เหมือนเดิมครับ
7 @R12746
ขอโทษครับอาจารย์ ได้แล้วครับ ลืมแก้ตรง table ให้เป็น table ของผม
8 @R12747
อาจารย์สันติสุขครับ ถ้าใน table ของเรามีชนิดด้วย เราจะแยกให้มัน RunningSum แยกชนิดยังงัยครับ
9 @R12751
ในตารางของผม table มีฟิลด์ชนิด Type ด้วย ผมต้องการให้มันแยกชนิดให้ด้วย ผมเลยไปเพิ่มเงื่อนไขในตารางย่อยเป็นแบบนี้
SELECT DISTINCT (t1.[เดือน]+2) Mod 12 AS Expr1, t1.[เดือน], (select sum(t2.[จำนวน]) from table as t2 where ((t2.[เดือน]+2) Mod 12) <= ( (t1.[เดือน]+2) Mod 12) And [t2].[Acc]=1) AS Expr2
FROM table AS t1
ORDER BY (t1.[เดือน]+2) Mod 12
ผลที่ออกมามันก็ใช้ได้ครับ แต่มันมีแค่ชนิดเดียว ผมมี 3 Type ต้องทำ 3 ชุด แล้วเอามา Union กัน แล้วค่อยเอาไป CesstabQuery ทำแบบนี้มันจะประมวลผลช้ารึปล่าวครับ
10 @R12752
ลืมแก้ชื่อฟิลด์ครับต้องแบบนี้
SELECT DISTINCT (t1.[เดือน]+2) Mod 12 AS Expr1, t1.[เดือน], (select sum(t2.[จำนวน]) from table as t2 where ((t2.[เดือน]+2) Mod 12) <= ( (t1.[เดือน]+2) Mod 12)And [t2].[Type]=1) AS Expr2
FROM table AS t1
ORDER BY (t1.[เดือน]+2) Mod 12
11 @R12753
SELECT DISTINCT t1.[ชนิด] , ... , ... , (select sum(...) from ... where ((...) >= (...)) and (t2.[ชนิด] = t1.[ชนิด])) AS Expr2
FROM ...
ORDER BY t1.[ชนิด], (t1.[เดือน]+2) Mod 12
12 @R12755
ทดสอบ ส่งไม่ได้

13 @R12756
ผมนำโค๊ตของอาจารย์มาแก้ไขเล็กน้อยตามโครงสร้างของผม ออกมาแบบนี้
SELECT DISTINCT ([t1].[เดือน]+2) Mod 12, t1.เดือน, t1.ชนิด, (select sum(t2.[U]) from table AS t2 where ([t2].[เดือน]+2) Mod 12 <=(([t1].[เดือน]+2) Mod 12) And (t2.[ชนิด]=t1.[ชนิด]))
FROM table AS t1
ORDER BY ([t1].[เดือน]+2) Mod 12;

ซึ่งได้ผลลัพธ์ออกมาถูกต้อง ขั้นตอนต่อไปเอามาทำ CesstabQuery มันไม่สามารถทำได้ครับ มัน Error มันแจ้งว่าไม่พบ [t1].[เดือน]
เลยไปกำหนด เดือนใน Query มันก็ได้ผลลัพธ์ ตามที่ระบุครับ
ขอบพระคุณอาจารย์สันติสุขมากๆ ครับ ผมได้แนวคิดในการทำ RunningSum อีกแบบแล้วครับ
14 @R12955
อ.สันติสุขครับ
ผมทำ Running Sum เป็นเดือนคล้ายๆ แบบนี้ แตกต่างกันตรงที่ เดือนที่ทำ Query นี้ไม่ได้มีปีเดียว
ยกตัวอย่าง
ถ้ามีปีเดียว 11 12 1 2 3 4 5 6 7 8 9 10
ถ้ามีหลายปี 11 12 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6............
มันจะไม่ทราบว่า เดือน 11 หรือ เดือนอื่นๆ เป็นปีก่อนหลัง ทำให้ผลที่ได้ออกมาผิด
ผมลองทำดู 2-3 วันแล้วครับ ทำไม่ได้ ขอความกรุณาอาจารย์อีกครั้งครับ
15 @R12958
สมมุติถ้าเดือน 10 นับเป็นเดือนแรกของงยประมาณ อยากทราบว่าค่าผลรวมของช่อง 12/2011 จะเท่ากับผลรวมตั้งแต่ 10/2010-12/2011 หรือว่ารวมผลรวมเฉพาะในปีงบประมาณนั้นๆ นั่นคือเป็นผลรวมของ 10/2011-12/2011 เท่านั้น
16 @R12959
งานนี้เป็นงานใหม่ครับอาจารย์ ไม่ได้เป็นปีงบประมาณ
คือ ผมจะทำสต๊อกยา แล้วเวลาเลือกดูรายงาน จะต้องมีข้อมูลยอดยาเดือนเก่าอะครับ เลยคิดจะทำวิธี Running Sum เลยมาต่อกระทู้นี้ครับ
ผลรวมมันจะไม่ได้รวมเป็นปีงบ ผมจะใช่วิธีนี้ไปหักลบ เหลือยอดคงเหลือครับ
17 @R12960
ไม่เข้าใจครับ ช่วยแสดงตัวอย่างข้อมูลเหมือนในโจทย์ด้วย
18 @R12961
ยาแต่ละชนิด มีใช้ทุกวัน เก็บข้อมูล ในรูป
วันที่ใช้     ชื่อยา       จำนวน    
แล้วยาแต่ละตัว ก็เก็บ ยอดยกมาของยา มีอีก 1 ตาราง เก็บจำนวนที่เบิกยา
วันที่เบิกยา   ชื่อยา   จำนวน

แต่รายงานผม ต้องการ ทราบว่า ใช้ยาไปเท่าไหร่ (วดป ที่กำหนด) เหลือเท่าไหร่ครับ

คือต้องนำ ยอดยกมา + เบิกยา - ใช้ยา = คงเหลือครับ

หน้าตารายงานเป็นแบบนี้
                         เดือนที่แล้ว                           เดือนนี้
ชื่อยา          จำนวนใช้    คงเหลือ        จำนวนใช้    คงเหลือ   

ในรายงานผมเลือกเป็นเดือน เลยต้องทำ Running Sum แบบเป็นเดือน     

ไม่แน่ใจว่า อาจารย์จะเข้าใจหรือยัง ถ้ายัง ผมจะอธิบายเพิ่มอีกครับ

ที่มาต่อกระทู้นี้เผื่อเวลาคนอื่นมาคนหา จะได้เป็นเรื่องเดียวกันเลย
19 @R12962
1) ยอดยกมา เก็บไว้ทุกเดือนหรือไม่ ถ้าใช่ก็จะมีฟิลด์ที่เก็บค่าเดือน/ปีไว้ด้วย อยากรู้ว่าฟิลด์นี้แยกออกเป็น 2 ฟิลด์คือ เดือนฟิลด์นึง และปีอีกฟิลด์นึง หรือว่าเก็บอย่างไร

2) เท่าที่อ่าน เข้าใจว่าตอนนี้มี 3 เทเบิลคือ เทเบิลการเบิก, เทเบิลการจ่าย และเทเบิลยอดยกมา ใช่หรือไม่ ถ้าไม่ใช่ ช่วยอธิบายด้วยว่ามีกี่เทเบิลกันแน่
20 @R12963
มี 3 เทเบิลจริงครับอจารย์
ยอดยกมาผมเก็บไว้ที่ตาราง DRUG เป็นค่าคงที่ ฟิลด์ Startstock

ยอดเบิกเก็บไว้อีก 1 ตาราง ชื่อ drug_Receive
วันที่เบิก date_Receive (date/time)
รหัสยา drugcode (taxt)
จำนวนเบิก unit (number)

ยอดใช้ ตาราง druguse
วันที่ใช้ visitdate (date/time)
รหัสยา drugcode (taxt)
จำนวนใช้ unit (number)

ยอดเบิกจะเบิกทุกเดือนเก็บวันที่เบิกเป็นวันที่เบิกเลยครับไม่ได้แยกเดืนปี
จำนวนใช้ จะใช้ทุกวัน เก็บวันที่ใช้ เป็นวันที่เลยเหมือนกันครับ

ปัญหาของผมคือเวลา Sum เป็นเดือน การเรียงลำดับมันจะไม่เรียงตามวันจริง
เช่น วันที่1/11/2554 จะได้ค่าเดือนเป็น 11 วันที่1/11/2555 จะได้ค่าเดือนเป็น 11 เช่นกัน เมื่อทำ running sum มันจะเรียงลำดับผิด



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