กระทู้เก่าบอร์ด อ.Yeadram
4,199 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
มันแนวทางการทำอย่างไรได้บ้างครับ เช่นไปกำหนดที่ คุณสมบัติ ตรงไหนได้ หรือใช้สูตรอะไร ฟังชันอะไรครับ
เดือน จำนวน
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
2 @R12711
แก้ไข
select distinct t1.[เดือน], (select sum(t2.[จำนวน]) from table as t2 where t2.[เดือน] >= t1.[เดือน]) from table as t1 order by t1.[เดือน]
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
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
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))
ก็เลยลองนับวงเล็บ เห็นว่ามันขาดไป เลยลองเติมเอง แต่ก็เหมือนเดิมครับ
มัน 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 ทำแบบนี้มันจะประมวลผลช้ารึปล่าวครับ
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
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
FROM ...
ORDER BY t1.[ชนิด], (t1.[เดือน]+2) Mod 12
12 @R12755
ทดสอบ ส่งไม่ได้
13 @R12756
ผมนำโค๊ตของอาจารย์มาแก้ไขเล็กน้อยตามโครงสร้างของผม ออกมาแบบนี้
ซึ่งได้ผลลัพธ์ออกมาถูกต้อง ขั้นตอนต่อไปเอามาทำ CesstabQuery มันไม่สามารถทำได้ครับ มัน Error มันแจ้งว่าไม่พบ [t1].[เดือน]
เลยไปกำหนด เดือนใน Query มันก็ได้ผลลัพธ์ ตามที่ระบุครับ
ขอบพระคุณอาจารย์สันติสุขมากๆ ครับ ผมได้แนวคิดในการทำ RunningSum อีกแบบแล้วครับ
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 วันแล้วครับ ทำไม่ได้ ขอความกรุณาอาจารย์อีกครั้งครับ
ผมทำ 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 เลยมาต่อกระทู้นี้ครับ
ผลรวมมันจะไม่ได้รวมเป็นปีงบ ผมจะใช่วิธีนี้ไปหักลบ เหลือยอดคงเหลือครับ
คือ ผมจะทำสต๊อกยา แล้วเวลาเลือกดูรายงาน จะต้องมีข้อมูลยอดยาเดือนเก่าอะครับ เลยคิดจะทำวิธี Running Sum เลยมาต่อกระทู้นี้ครับ
ผลรวมมันจะไม่ได้รวมเป็นปีงบ ผมจะใช่วิธีนี้ไปหักลบ เหลือยอดคงเหลือครับ
17 @R12960
ไม่เข้าใจครับ ช่วยแสดงตัวอย่างข้อมูลเหมือนในโจทย์ด้วย
18 @R12961
ยาแต่ละชนิด มีใช้ทุกวัน เก็บข้อมูล ในรูป
วันที่ใช้ ชื่อยา จำนวน
แล้วยาแต่ละตัว ก็เก็บ ยอดยกมาของยา มีอีก 1 ตาราง เก็บจำนวนที่เบิกยา
วันที่เบิกยา ชื่อยา จำนวน
แต่รายงานผม ต้องการ ทราบว่า ใช้ยาไปเท่าไหร่ (วดป ที่กำหนด) เหลือเท่าไหร่ครับ
คือต้องนำ ยอดยกมา + เบิกยา - ใช้ยา = คงเหลือครับ
หน้าตารายงานเป็นแบบนี้
เดือนที่แล้ว เดือนนี้
ชื่อยา จำนวนใช้ คงเหลือ จำนวนใช้ คงเหลือ
ในรายงานผมเลือกเป็นเดือน เลยต้องทำ Running Sum แบบเป็นเดือน
ไม่แน่ใจว่า อาจารย์จะเข้าใจหรือยัง ถ้ายัง ผมจะอธิบายเพิ่มอีกครับ
ที่มาต่อกระทู้นี้เผื่อเวลาคนอื่นมาคนหา จะได้เป็นเรื่องเดียวกันเลย
วันที่ใช้ ชื่อยา จำนวน
แล้วยาแต่ละตัว ก็เก็บ ยอดยกมาของยา มีอีก 1 ตาราง เก็บจำนวนที่เบิกยา
วันที่เบิกยา ชื่อยา จำนวน
แต่รายงานผม ต้องการ ทราบว่า ใช้ยาไปเท่าไหร่ (วดป ที่กำหนด) เหลือเท่าไหร่ครับ
คือต้องนำ ยอดยกมา + เบิกยา - ใช้ยา = คงเหลือครับ
หน้าตารายงานเป็นแบบนี้
เดือนที่แล้ว เดือนนี้
ชื่อยา จำนวนใช้ คงเหลือ จำนวนใช้ คงเหลือ
ในรายงานผมเลือกเป็นเดือน เลยต้องทำ Running Sum แบบเป็นเดือน
ไม่แน่ใจว่า อาจารย์จะเข้าใจหรือยัง ถ้ายัง ผมจะอธิบายเพิ่มอีกครับ
ที่มาต่อกระทู้นี้เผื่อเวลาคนอื่นมาคนหา จะได้เป็นเรื่องเดียวกันเลย
19 @R12962
1) ยอดยกมา เก็บไว้ทุกเดือนหรือไม่ ถ้าใช่ก็จะมีฟิลด์ที่เก็บค่าเดือน/ปีไว้ด้วย อยากรู้ว่าฟิลด์นี้แยกออกเป็น 2 ฟิลด์คือ เดือนฟิลด์นึง และปีอีกฟิลด์นึง หรือว่าเก็บอย่างไร
2) เท่าที่อ่าน เข้าใจว่าตอนนี้มี 3 เทเบิลคือ เทเบิลการเบิก, เทเบิลการจ่าย และเทเบิลยอดยกมา ใช่หรือไม่ ถ้าไม่ใช่ ช่วยอธิบายด้วยว่ามีกี่เทเบิลกันแน่
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 มันจะเรียงลำดับผิด
ยอดยกมาผมเก็บไว้ที่ตาราง 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 มันจะเรียงลำดับผิด
Time: 0.3369s
ถ้าเทเบิลของคุณมีเดือนและปีด้วย และต้องการผลรวมเฉพาะจำนวนในปีนั้น เงื่อนไขต้องเปรียบเทียบปีด้วยนะครับ