0

こんにちは、以下の表があります。

Id      StartDt          EndDt       
-----   --------         -------
123     01-Apr-2016      15-Apr-2016
456      02-Apr-2016     03-Apr-2016

すべての DB プラットフォームで機能する一般的な sql Insert ステートメントを作成したいと考えています。

上記のテーブルから新しいテーブルに以下のようなデータを挿入します

挿入後の新しいテーブル値:

Id       Date           SeqNo
123      01-Apr-2016       1
123      02-Apr-2016       2
123      03-Apr-2016       3
123      04-Apr-2016       4
123      05-Apr-2016       5
123      06-Apr-2016       6
123      07-Apr-2016       7
123      08-Apr-2016       8
..
..
..
..
123      15-Apr-2016       15,


AssignmentID    Date    SeqNo
123 1-Apr   1
123 2-Apr   2
123 3-Apr   3
123 4-Apr   4
123 5-Apr   5
.       
.       
.       
.       
.       
123 15-Apr  15

つまり、最初の行 (終了日 - 開始日) には 15 行、メイン テーブルの 2 行目 (終了日 - 開始日) には同様に 2 行です。

4

2 に答える 2

0

0 から 9999 までのすべての整数を含む間隔テーブルを作成します。これはプログラムで行うことができます。

CREATE TABLE intervals (period int);
INSERT INTO intervals (period) VALUES (0),(1);
DECLARE @rowCnt int;
SELECT @rowCnt = 2;
WHILE (SELECT Count(*) FROM intervals) < 10000 BEGIN
    INSERT INTO intervals (period) SELECT period + @rowCnt FROM intervals WHERE period + @rowCnt < 10000;
    SELECT @rowCnt = @rowCnt * 2
END;

ループが初めて実行されると、テーブルがいっぱいになるまで、値が 2 と 3 の 2 つの行が挿入され、次に 4 つの行が挿入されます。

次に、このテーブルを日付を含むテーブルとクロス結合して挿入し、(開始日 + 間隔 (日)) を開始日 + 間隔 <= 終了日として挿入します。

于 2016-04-21T04:14:48.973 に答える
0

これは UDTF で行うのが最適です。UDTF は入力 2 値を持ち、日付範囲をエクスポートします。この実装は Explode に似ています。

于 2016-04-21T05:18:00.317 に答える