トップページに戻る    次のmodel句のサンプルへ    前のmodel句のサンプルへ

model句02 総積を求める

SQLパズル

ValTable
No  Val
--  ----
 1     3
 2     9
 3    -6
 4     5
 5  -0.1
 6     5
 7    -2
 8     0
 9    10

Noの昇順で、自分の行までのValの総積を求める。

出力結果
No  Val   souseki
--  ----  -------
 1     3        3
 2     9       27
 3    -6     -162
 4     5     -810
 5  -0.1       81
 6     5      405
 7    -2     -810
 8     0        0
 9    10        0


データ作成スクリプト

create table ValTable(
No  number(1),
Val number(3,1));

insert into ValTable values(1, 3);
insert into ValTable values(2, 9);
insert into ValTable values(3,-6);
insert into ValTable values(4, 5);
insert into ValTable values(5,-0.1);
insert into ValTable values(6, 5);
insert into ValTable values(7,-2);
insert into ValTable values(8, 0);
insert into ValTable values(9,10);
commit;


SQL

select No,Val,souseki
  from ValTable
 model
 dimension by (No)
 measures(Val,0 souseki)
 rules(souseki[any] order by No = Val[CV(No)] * nvl(souseki[CV(No)-1],1))
order by No;


解説

分析関数と対数法則を使うよりも、model句を使ったほうが明らかにシンプルですね。

2-3-16 総積を求める
再帰with句09 総積を求める

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
セルが存在しない時のnvlの代用関数

present 名詞 プレゼント
        他動 プレゼントする

presentNNV (exp1,exp2,exp3)

・exp1にセルが(1番最初から)存在し、かつ、非nullならexp2
・exp1にセルが(1番最初から)存在しない、または、nullならexp3

nvl2もどきと覚えるといいでしょう。
使いどころは、欠損セルのデフォルト値を変更した場合のようです。
present Null to New Valueの略と思われます。

マニュアル(presentV)
マニュアル(presentNNV)
マニュアル(presentV)(英語)
マニュアル(presentNNV)(英語)