我有一个表“table1”,一年中的月份从1到12行编号,1到31天的月份以列的形式表示。
还有另一个表“table2”,其中存储日期和一些其他值。日期具有日期数据类型。我需要从那个'table2‘中获取日期,比较月和日的值,并相应地将值插入'table1’。示例如果“table2”的日期为21-6月-2017年,则应在“表1”中的第21冒号(日)和第6行(月份)中插入值。如何使用SQL在Oracle 11g中实现相同的功能?
谢谢你提前帮忙。
发布于 2017-06-21 12:59:14
Oracle安装
简化您的表-不要存储32列(月份和31天),而只是存储月份、日期和值,并根据需要对输出进行PIVOT:
CREATE TABLE table1 (
month NUMBER(2,0),
day NUMBER(2,0),
value VARCHAR2(4000)
);
INSERT INTO table1
SELECT EXTRACT( MONTH FROM date_column ),
EXTRACT( DAY FROM date_column ),
value
FROM table2;查询
SELECT month, d1, d2, d3, d4, /* ..., */ d31
FROM table1
PIVOT ( MAX( value ) FOR day IN (
1 AS d1, 2 AS d2, 3 As d3, 4 AS d4, /* ..., */ 31 AS d31
) );更新
表1的DDL:- 创建表table1 (月号、1号、2号、...31号);
您可以使用:
INSERT INTO table1
SELECT month, d1, d2, /* ..., */ d31
FROM ( SELECT EXTRACT( MONTH FROM date_column ) AS month,
EXTRACT( DAY FROM date_column ) AS day,
value
FROM table2 )
PIVOT ( MAX( value ) FOR day IN (
1 AS d1, 2 AS d2, /* ..., */ 31 AS d31
) );或者,如果要更新现有行,请使用MERGE INTO。
https://stackoverflow.com/questions/44676524
复制相似问题