2226
צפיות
צפיות
2
תשובות
תשובות
סיכום מצטבר ב – SQL
האם ניתן לבצע סיכום מצטבר על סמך נתון משורה קודמת בשאילתת SQL
לדוגמא :
NO|NAME|TOTAL
בשורה הראשונה הסכום המצטבר הוא 0 ולכן השאילתא צריכה להציג את הסכום הנוכחי (כלומר את TOTAL).
בשורה הבא היא צריכה להציג את הסכום המצטבר מהשורה הקודמת + הסכום הנוכחי (כלומר TOTAL נוכחי + TOTAL קודם) וכן אלה
הפקודה SUM פשוט מסכמת ומציגה סיכום סופי.
אני יודע שניתן להשתמש ע"י GROUP BY כדי להגיע לקבל סיכום לפי קבוצה, אך במקרה הזה לא ניתן לבצע GROUP BY מכיוון שיש להציג מספר שדות וה- GROUP BY לא יתבצע בצורה נכונה (כלומר רק לגבי הסכום).
האם יש דרך לעשות זאת ?
תודה מראש .
2 תשובות
ברמת ה 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();
}
}
מכוה שיש למישהו שאילתה יותר יפה מזו
עבור טבלה: "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
אם אחשוב על משהו יותר טוב… אכתוב
אני הייתי מעדיף את השיטה הקודמת (של זהר פלד)