שלח תשובה

זירת השאלות

954
צפיות
2
תשובות

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

,‏ 20 בספטמבר, 2005

האם ניתן לבצע סיכום מצטבר על סמך נתון משורה קודמת  בשאילתת SQL
לדוגמא :
NO|NAME|TOTAL


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

האם יש דרך לעשות זאת ?

תודה מראש   .

תגיות:

2 תשובות

  1. זהר פלד הגיב:

    ברמת ה SQL יכול להיות אולי איזה
    טריק מסובך של שאילתה מקוננת שתעשה את זה,
    אבל ברמת הקוד ניתן לבצע את זה בצורה הרבה יותר פשוטה וקלה – אני נותן לך דוגמא ב asp/js, כי לא ציינת על איזה טכנולוגיית צד שרת מדובר, וזו הטכנולוגיה שאני עובד איתה:

    if(!rs.eof) {
      var tempSum=0;

        while(!rs.eof) {
          tempSum += rs("quantity").value;
          Response.write("<tr><td>"+ rs("no").value +"</td><td>"+ rs("name").value +"</td><td>"+ tempSum +"</td></tr>");
          rs.movenext();
        }
    }

  2. ramiyam הגיב:

    מכוה שיש למישהו שאילתה יותר יפה מזו
    עבור טבלה: "TABLE, עמודת מפתח: KEYCALL ועמודה שאותה מסכמים: NUMBER


    SELECT T1.keyCall, T1.number,

      ( SELECT sum(T2.number) FROM [Table] AS T2 WHERE T2.keyCall between  T1.keyCall AND
      
          (SELECT last(keyCall)
           FROM  (
                       SELECT * FROM [Table] ORDER BY keyCall desc
                       )
           )

      ) AS TheSum

    FROM (SELECT * FROM [Table] ORDER BY keyCall desc) AS T1

    אם אחשוב על משהו יותר טוב… אכתוב

    אני הייתי מעדיף את השיטה הקודמת (של זהר פלד)

שלח תשובה