以下のような2つのテーブルがあります。
TABLE_A
START_DT END_DT 値
1993/4/1 1993/4/29 48
1993/4/29 1993/5/12 48
1993/5/13 1993/5/27 44
1993/5/27 1993/8/18 44
TABLE_B
START_DT END_DT 値
1993 年 4 月 1 日 1993 年 5 月 12 日 NULL
1993 年 5 月 13 日 1993 年 8 月 18 日 NULL
ご覧のとおり、TABLE A の最初の 2 行の日付範囲は、TABLE B の最初の行の日付範囲にあります。表 A の行 3 と行 4 の日付範囲は、表 B の行 2 に含まれます。
日付範囲に基づいて、A.VALUE を取得し、TABLE B が次のように表示されるように B.VALUE を更新します。
TABLE_B
START_DT END_DT 値
1993 年 4 月 1 日 1993 年 5 月 12 日 48
1993 年 5 月 13 日 1993 年 8 月 18 日 44
カーソルを使用してこれを実行し始め、テーブル A を調べて、A.START_DT と A.END_DT がテーブル B の範囲内にあるかどうかを確認し、それに応じて更新します。
基本的、
DECLARE @StartDate datetime, @EndDate datetime, @Value smallint;
DECLARE MyCursor cursor for
select * from TABLE_A
OPEN MyCursor
FETCH NEXT FROM MyCursor INTO @StartDate,@EndDate, @Value
//次に、何かをしたい:
// SELECT START_DT, END_DT
// FROM TABLE_B
// WHERE START_DT <= A.@EndDate
// AND END_DT>= A.@StartDate
//
//
//ここから、TABLE B の VALUE 列を更新する最善の方法について混乱しています。
UPDATE TABLE B
SET VALUE = @Value
WHERE B.START_DT,B.END_DT in (
SELECT start_dt,end_dt
FROM TABLE_B
WHERE start_dt <= @EndDate
AND end_dt >= @StartDate)
上記は正しい構文ではありませんが、要点はわかります。誰かがこれを行う/修正するための迅速で汚い方法を持っていますか? 日付範囲に基づいて作業したい行を選択し、単一の VALUE 列を更新する SQL を作成する方法について頭が固まります。
カーソルを使わずにこれを行う簡単な方法はありますか?
よろしくお願いします。