私はきちんとシナリオを解釈するが、ここで私がやったことであればわからない午前:
開始するには、私は(関数への入力を模倣するカップルの変数を作成し、再帰共通テーブル式を構成します
create variable OpenedWith decimal default 5000
;
create variable Factor decimal(2, 1) default 0.1
;
with
t (adjustment) as (values(100), (200), (300))
, ordRows (rn, Adjustment) as
(select row_number() over(), Adjustment from t)
, addRows (rn, Opening, Shift, Adjustment, closing) as
(select rn, OpenedWith, OpenedWith*Factor , Adjustment
, (OpenedWith + (OpenedWith*Factor) + Adjustment)
from ordRows
where rn = 1
union all
select b.rn, a.Closing, a.Closing * Factor , b.Adjustment
, (a.Closing + (a.Closing * Factor) + b.Adjustment)
from addRows a
join ordRows b
on a.rn = (b.rn - 1)
)
select int(rn) as rn, int(opening) as opening
, int(shift) as shift, adjustment
, int(closing) as closing
from addRows
:これらの変数から得られたデータを使用してレポートを生成するRCTE) 0 次は、上記のクエリからのレポートです:
:Tという名前のテーブル内のデータに対して操作するユーザ定義のテーブル・ファンクション(UDTF)に上記のスクリプト変数の作品やクエリを変更する
RN OPENING SHIFT ADJUSTMENT CLOSING
1 5,000 500 100 5,600
2 5,600 560 200 6,360
3 6,360 636 300 7,296
そして今、
create function shifted_vals
(OpenedWith decimal(5)
, Factor decimal(3, 2)
)
returns table
(Opening int
, Shift int
, Adjustment int
, Closing int
)
return
with
ordRows (rn, Adjustment) as
(select row_number() over(), Adjustment from t)
, addRows (rn, Opening, Shift, Adjustment, closing) as
(select rn, OpenedWith, OpenedWith*Factor , Adjustment
, (OpenedWith + (OpenedWith*Factor) + Adjustment)
from ordRows
where rn = 1
union all
select b.rn, a.Closing, a.Closing * Factor , b.Adjustment
, (a.Closing + (a.Closing * Factor) + b.Adjustment)
from addRows a
join ordRows b
on a.rn = (b.rn - 1)
)
select opening, shift, adjustment, closing
from addRows
order by rn
次に引数として注目開度値と係数とUDTFを呼び出します。すなわち、もはや作成された変数に依存しないで、入力パラメータを介して得られた値である。
select t.*
from table(shifted_vals(5000, 0.1)) as t
; -- results as report, follows:
OPENING SHIFT ADJUSTMENT CLOSING
5,000 500 100 5,600
5,600 560 200 6,360
6,360 636 300 7,296
テーブルT内のデータの照合を定義して、前の行_おそらく特定の順序なしで、row_number()over()?また、OPの2)は「Opening + Shift + Closing」と定義されていますが、その結果に応じて、式は「Opening + Shift + Adjustment」である必要があります。 – CRPence