2017-07-20 7 views
0

に私は私の出力は下記の表のようになりたい 同じグループ

id depid sal 
1 1 100 
2 1 200 
3 2 300 
4 2 400 

下のようなテーブルを持っている内の現在の値に以前の値を追加します。 出力で何が起こっているのですか?Sal値は同じdeptidの前の値を加えることによって増加しています。

id depid sal 
1 1 100 
2 1 300 
3 2 300 
4 2 700 

どのようにすれば達成できますか?私はOracleデータベースを使用しています。

答えて

3

分析機能。分析方法で

select id, depid, sum(sal) over(partition by depid order by id) sal from test; 

sum関数初めから現在の行までのすべての行を合計し、それが

Extendeバージョンのデフォルトの動作です。

select id, depid, sum(sal) over(partition by depid order by id range unbounded preceding) sal from test; 

最後のオプション。

select id, depid, sum(sal) over(partition by depid order by id range between unbounded preceding and current row) sal from test; 

これらの例のそれぞれはまったく同じです。どのように動作しているかを示すために追加しました。 Analitic function

*詳しくチェックドキュメントについて

コメントの後に追加されました。

select id, depid, sum(sal) over(partition by depid order by id rows 1 preceding) sal from test; 

select id, depid, sum(sal) over(partition by depid order by id rows between 1 preceding and current row) sal from test; 
+0

最初のクエリは、deptid内のすべての給与の合計を返しますが、同じdeptid内でsalが最後に追加される予定の出力が表示された場合、!!第二と第三のクエリが動作していない...!申し訳ありません – LearnJava

+0

すべてのクエリが機能するはずです。 Oracle 11.2でテストしました。現在の行と1行前のsum salに2つの例を追加しました。 –

関連する問題