如何创建表取决于其他表中的值并取决于这些值SQL

时间:2018-06-26 08:21:09

标签: sql oracle

与标题中的im一样,搜索创建新表的方式。该表将是每月合同表

create table NR1
(
  id         INTEGER not null,
  price      INTEGER,
  price2     INTEGER,
  start_date DATE,
  end_date   DATE,
  duration   NUMBER
)

根据持续时间,我想将整个日期从start_date到end_date切成小的月份,并将其作为一行,例如,如果持续时间为5且开始日期为2018-05-01的一行,那么我想在新表中每个月都有5行,所以2018-05-01、2018-06-01,...,2018-10-01。

您能告诉我应该使用什么来解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可以创建这样的视图。

示例行

INSERT INTO NR1 (id,price,price2,start_date,end_date,duration) VALUES ( 1,20,40,DATE '2018-05-01',NULL, 5);
INSERT INTO NR1 (id,price,price2,start_date,end_date,duration) VALUES ( 2,30,60,DATE '2018-02-01',NULL, 6);

查看

CREATE OR REPLACE VIEW v_NR1 AS
SELECT id,price,price2,
    add_months(start_date,level - 1) AS start_date,
    last_day(add_months(start_date,level - 1) ) AS end_date
FROM
    nr1
CONNECT BY level <= duration
           AND PRIOR id = id
           AND PRIOR sys_guid() IS NOT NULL;

Demo

答案 1 :(得分:0)

要解决此问题,您可以在表上创建触发器,并根据需要参考表中的字段。