2013-11-15 2 views
0

У меня есть данные в моей таблице следующим образом,Рекурсивные функции в SQL

+----+-----+ 
| ID | Qty | 
+----+-----+ 
| 1 | 100 | 
| 2 | 200 | 
| 3 | 150 | 
| 4 | 50 | 
+----+-----+

я нужен результат следующим образом,

+----+-----+-------+ 
| ID | Qty | C.Qty | 
+----+-----+-------+ 
| 1 | 100 | 100 | 
| 2 | 200 | 300 | 
| 3 | 150 | 450 | 
| 4 | 50 | 500 | 
+----+-----+-------+

результат третьего столбца будет суммой предыдущих строк , пожалуйста, любой помощи ....

+0

Я не понимаю ... где же '500' пришел? –

+0

@PaulDraper 450 + 50 = 500 .. –

+0

Это уже ответ [здесь] (http://stackoverflow.com/questions/2120544/how-to-get-cumulative-sum) – remigio

ответ

2

Я бы просто использовать подзапрос:

SELECT ID, Qty, 
    (SELECT SUM(Qty) FROM [My Table] b WHERE b.ID <= [My Table].ID) AS [Total Qty] 
FROM [My Table] 
+0

благодаря его работе – user2249248

2

Пожалуйста, попробуйте:

SELECT S1.ID, S1.Qty ,sum(S2.Qty) CUM_SUM 
FROM YourTable S1 join YourTable S2 
on S1.ID>=S2.ID 
group by S1.ID, S1.Qty 
ORDER BY S1.ID 
1
SELECT ID, Qty, 
SUM(Qty) OVER(ORDER BY ID 
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
     AS C.QTY 
FROM Table 
+0

Выглядит интересно. Для чего нужен сервер баз данных? – David

+0

это ANSI-SQL –

+0

@David Sql Server 2012 (не поддерживается ранее). Не уверен, когда оракул начал поддерживать его. Работает не менее 11г. Не удивился бы, если бы он работал postgresql. Определенно не будет работать в MySQL –

0

попробовать это:

select a.id,a.qty,sum(b.qty) as total_qty 
from table a cross join table b 
where b.id <= a.id 
group by a.id,a.qty 
order by a.id 

demo

Смежные вопросы