sql >> Databáze >  >> RDS >> Oracle

Přidání záznamů s nulovou hodnotou v dotazu pomocí kumulativních analytických funkcí

Místo CURRENT ROW můžete použít klíčové slovo PRECEDING k sečtení do předchozího řádku.

with data as (
  select 1 id, 'A' name, 'fruit' r_group, '2007' year, '04' month, 5 sales from dual union all
  select 2 id, 'Z' name, 'fruit' r_group, '2007' year, '04' month, 99 sales from dual union all
  select 3 id, 'A' name, 'fruit' r_group, '2008' year, '05' month, 10 sales from dual union all
  select 4 id, 'B' name, 'vegetable' r_group, '2008' year, '07' month, 20 sales from dual )
select t.*, 
  coalesce(sum(sales) over (partition by  r_group order by year, month rows between unbounded preceding and 1 preceding),0) opening,
  sum(sales) over (partition by  r_group order by year, month rows between unbounded preceding and current row) closing
from (
  select year, month, r_group, sum(sales) sales
  from data
  group by year, month, r_group
  ) t
order by 3,1,2;

year    month   r_group     sales   opening closing
---------------------------------------------------
2007    04      fruit       104     0       104
2008    05      fruit       10      104     114
2008    07      vegetable   20      0       20


  1. Jak analyzujete jednoduchý fragment XML v Oracle PL/SQL a načtete jej do globální dočasné tabulky?

  2. Jak mohu uchopit a uložit více proměnných $_POST v každé smyčce?

  3. Migrace Oracle na Postgres, MySQL nebo MS Access

  4. Oracle SQL Developer 3.1.07 další mezery mezi znaky pomocí listagg