2

テーブルt1があります:

ID    Period
---  --------
1       5
2       3
3       2

(実際、テーブルには 366 の異なる ID があり、それらの期間は 23、24、または 25 です。)

フィールド ID と時間を持つテーブル t2 に複数の行を挿入したいのですが、ここで時間 (ID) は 1 ..期間 (ID) です。

ID    Hour
---  -----
1     1
1     2
1     3
1     4
1     5
2     1
2     2
2     3
3     1
3     2

どうすればいいですか?

4

2 に答える 2

4

modelたとえば、句を使用してこれを実現できます。

with t1(ID, Period) as(
  select 1, 5 from dual union all
  select 2, 3 from dual union all
  select 3, 2 from dual
)
select ID
     , period as hour
  from t1
  model
  partition by (ID)
  dimension by (1 as indx)
  measures(period)
  rules(
     period[for indx from 1 to period[1] increment 1] = cv(indx)
  )

SQLFiddle デモ

結果:

        ID      HOUR
---------- ----------
         1          1 
         1          2 
         1          3 
         1          4 
         1          5 
         2          1 
         2          2 
         2          3 
         3          1 
         3          2 

 10 rows selected 

そして、insertステートメントは次のようになります。

insert into t2(id, hour)
   select ID
        , period
     from t1
     model
     partition by (ID)
     dimension by (1 as indx)
     measures(period)
     rules(
        period[for indx from 1 to period[1] increment 1] = cv(indx)
     )
于 2013-09-19T16:13:49.780 に答える
0

テストのセットアップ:

CREATE TABLE t1 (
    ID INT PRIMARY KEY,
    Period INT NOT NULL
);

CREATE TABLE t2 (
    ID INT NOT NULL,
    Hour INT NOT NULL
    -- There would also be a PK here in real life.
);

INSERT INTO t1 VALUES (1, 5);
INSERT INTO t1 VALUES (2, 3);
INSERT INTO t1 VALUES (3, 2);

実際の挿入:

INSERT INTO t2
WITH CTE (ID, Hour) AS (
    SELECT ID, Period FROM t1
    UNION ALL
    SELECT ID, Hour - 1 FROM CTE WHERE Hour > 1
)
SELECT * FROM CTE;
于 2013-09-19T17:17:43.643 に答える