2014-10-29 2 views
0

Наша среда z/OS DB2. У меня есть данные ниже в таблице.Суммы столбцов в SQL

 Year  Amount 

    1998  2000 
    1999  3000 
    2000  2500 
    2001  10000 

Использование SQL-запроса Я хочу получить результат, как показано ниже. Результат должен быть следующим:

 Year  Amount Total_Amount_Invested 

    1998  2000  2000 
    1999  3000  5000 
    2000  2500  7500 
    2001  10000  17500 

Благодарим Вас за помощь в этом отношении.

ответ

1

Это называется текущим общим расчетом. Я создал одну фиктивную функцию, которую вы можете проверить. Я надеюсь, что вы получите от этого какую-то идею.

create table Test 
(
    year int, 
    amount int 
) 

insert into Test (year,amount) 
values 
(1998,2000), 
(1999,3000), 
(2000,2500), 
(2001,10000) 

select 
    t1.year, 
    sum(t2.amount) 
from 
    Test t1 
    join test t2 
    ON T2.year <= T1.year 
group by 
T1.year 

Я concidered года, чтобы рассчитать сумму, если вы хотите, вы можете сделать это с помощью первичного ключа

Вы также можете проверить с SQL скрипкой это DEMO я создал. DEMO Click to see

+1

@Shiva Komuravelly Пожалуйста, скажите мой запрос погоду helpd вас или нет –

+0

Да, это сделал, и я использовал его. –

1

В качестве альтернативы можно использовать OLAP functions:

declare global temporary table session.test (
    year int 
    ,amount int 
) ON COMMIT PRESERVE ROWS; 

insert into session.test (year,amount) 
    SELECT 1998,2000 FROM SYSIBM.SYSDUMMY1 UNION ALL 
    SELECT 1999,3000 FROM SYSIBM.SYSDUMMY1 UNION ALL 
    SELECT 2000,2500 FROM SYSIBM.SYSDUMMY1 UNION ALL 
    SELECT 2001,10000 FROM SYSIBM.SYSDUMMY1 
; 

SELECT 
    year 
    ,sumamt 
    ,sum(sumamt) OVER (ORDER BY year ROWS UNBOUNDED PRECEDING) 
FROM (
    select 
     year 
     ,sum(amount) AS SUMAMT 
    from session.test t1 
    GROUP BY year 
) A 
;