sql >> Database >  >> RDS >> Oracle

Records met een nulwaarde toevoegen aan een query met behulp van cumulatieve analytische functies

In plaats van HUIDIGE RIJ kunt u het trefwoord PRECEDING gebruiken om op te tellen tot de vorige rij.

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. Spring Boot MySql Toegang geweigerd voor gebruiker 'root'@'localhost'

  2. Sqlcmd:Fout:Microsoft SQL Server Native Client 10.0:Communicatieverbinding mislukt

  3. Hoe breng ik een kaart van en naar een complex type in EF4.3 code-first?

  4. Hoe kan mijn applicatie profiteren van tijdelijke tabellen?