sql >> データベース >  >> RDS >> Oracle

累積分析関数を使用してクエリにゼロ値レコードを追加する

    CURRENT ROWの代わりに、PRECEDINGキーワードを使用して、前の行まで合計することができます。

    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. 12cシーケンス値を使用した列の自動入力

    2. 複数のパラメーターを持つPHPisset()

    3. SQL-今年の結果のみを取得

    4. PHPとMySQLを使用して「クイズ」Webアプリケーションを開発するためのデータベース設計