2012-02-07 8 views
4

私は、行を一時テーブルに挿入するプロシージャを作成しようとしています。表の基礎は、ポリシの寿命にわたって獲得した保険料の額をリストアップした保険契約テーブルである。元のデータはtrans_date(date date)とpolicy_startおよびpolicy_endの日付で構成されます。すなわち、保険金額が12ヶ月であれば、毎月、保険料の1/12を徴収する。ストアドプロシージャでループを使用する

ので

while trans_month < policy_end month 

insert to tblUEPtmp 
select dateadd(mm, 1, trans_date), earned_premium from tblpolicys 

set trans_date = dateadd(mm, 1, trans_date) 

のようなもの(私はこれはrubbushコードである知っているが、私は完全に現時点では困惑)

私の問題は、私は、データの余分な11行を作成し、変更する必要があるということです変更された取引日= policy_end日付まで毎回1ヶ月追加する取引日。

が、これは複数ステートメントの表関数は、何ができるものです..私は、CTEを使用して調査しましたが、ループは、CTE内かのうない間?

多くのありがとうございます。

+0

あなたは何をしているのか説明できません。 – joshua

+0

元の保険料をpolicy_startとpolicy_endの間の月数に比例して割り振る作成された行を挿入しようとしています。一か月。 –

答えて

3

declare @start DATETIME = '2012-02-01' 
declare @end DATETIME = '2013-02-01' 
;with cte (date) 
AS 
(
    SELECT @start 
    UNION ALL 
    SELECT DATEADD(mm,1,cte.date) 
    FROM cte WHERE DATEADD(mm,1,cte.date)<@end 
) 
select * from cte 

月に@start & @end間の日付のリストを生成します。ギャップ。

あなたが

  1. あなたのテーブルスキーマについてのより詳細な情報を提供できる場合、あなたに必要なデータ

を挿入するinsert into...select ... from cteを行いダミー日付

  • の代わりにあなたの本当の表を使用することができます

    、私はおそらくもっと具体的な例を挙げて助けてくれるかもしれません。

  • +0

    これは、一度に1行ずつ渡す場合にのみ機能しますか?それをクエリに渡すのはどうですか? –

    1

    これは何か?

    あなたがDEFO例えばこの小さなスニペットは日付を使用して再帰を行う方法を説明します、CTEでこれを行うことができます
    set @trans_date = ... 
    while @trans_date < @policy_end 
    begin 
        insert to tblUEPtmp 
         select trans_date, earned_premium 
         from tblpolicys 
         where {whatever} 
        set @trans_date = dateadd(mm, 1, @trans_date) 
    end 
    
    関連する問題