סיכום מצטבר ב- SQL

raffibr

New member
סיכום מצטבר ב- SQL

האם ניתן לבצע סיכום מצטבר על סמך נתון משורה קודמת בשאילתת SQL לדוגמא : NO|NAME|TOTAL בשורה הראשונה הסכום המצטבר הוא 0 ולכן השאילתא צריכה להציג את הסכום הנוכחי (כלומר את TOTAL). בשורה הבא היא צריכה להציג את הסכום המצטבר מהשורה הקודמת + הסכום הנוכחי (כלומר TOTAL נוכחי + TOTAL קודם) וכן אלה הפקודה SUM פשוט מסכמת ומציגה סיכום סופי. אני יודע שניתן להשתמש ע"י GROUP BY כדי להגיע לקבל סיכום לפי קבוצה, אך במקרה הזה לא ניתן לבצע GROUP BY מכיוון שיש להציג מספר שדות וה- GROUP BY לא יתבצע בצורה נכונה (כלומר רק לגבי הסכום). האם יש דרך לעשות זאת ? תודה מראש
 

גרי רשף

New member
דוגמה לפתרון

אפשר לפתור זאת במספר דרכים ואני אציג אחת מהן. צור שאילתת Group By פשוטה עם Sum ושמור אותה. כללית היא תיראה לבטח כך:
Select ID,Sum(Camut) Camut From Tavla Group By ID​
כעת צור שאילתה חדשה שתכלול Inner Join של השאילתה הקודמת עם עצמה, בצורה הזו:
Select Q1.ID,Q1.Camut,Q2.Camut CamutS From Sheilta Q1 Inner Join Sheilta Q2 On Q1.ID>=Q2.Id​
כלומר- לכל שורה מהשאילתה נצמיד את כל השורות שלפניה. כעת ניצור שאילתה נוספת שתתבסס על השאילתה השניה (עם ה-Inner Join) בערך כך:
Select ID,Max(Camut) Camut, Sum(CamutS) CamutS From Sheilta2 Group By ID​
וכך נקבל בעמודה הראשונה את ה-ID, בשניה את ה-Sum שלו, ובשלישית את ה-Sum של כל הרשומות עד אליו. הערה- ניתן לעשות זאת גם בדרכים אחרות, וגם עם פחות שאילתות.
 

raffibr

New member
גדי, ראשית תודה

שנית, האם תוכל בבקשה לתת לי דוגמא לפתרון אם פחות שאילתות ? האם אין פקודה שמחזירה ערך של שורה קודמת משהו כמו (PREVVal(FieldNam ? תודה מראש.
 

גרי רשף

New member
גרי, לא גדי..

Select Distinct ID, (Select Sum(Camut) From Tavla T1 Where T1.ID<=T.ID) From Tavla T​
קצת יותר פשוט..
 

raffibr

New member
זה לא ממש עובד ../images/Emo7.gif

איך אתה יכול להפעיל תת שאילתה בתוך פקודת ה- SELECT ? ב-SQLSERVER זה אפשרי ? כי בבסיס הנתונים איתו אני עובד זה לא מצליח (אני עובד עם PERVASIVE SQL) תודה מראש.
 

גרי רשף

New member
מצטער אך אינני מכיר את הגרסה הזו

כתבתי כפי שאני רגיל ב-SQL Server. שם זה אפשרי ובדקתי את זה. אינני יודע אם זה SQL תקני.
 

s h i m s h o n

New member
איזה DB?

באורקל זה משהו כמו:
select amount, amount+lag(total) as total from tbl​
אולי יש פונקציה דומה גם ב-DB אחרים. בברכה, ש.
 

raffibr

New member
בסיס הנתונים שאני מתשמש בו

אינומוכר כל כך, וכמה שאני יודע אין פקודה דומה למה שהראת באורקל. בסיס הנתונים הוא של חברת PERVASIVE. תודה.
 
למעלה