当前位置: 代码迷 >> Oracle管理 >> 急 有些难度的有关问题 高手赐教 万分感谢
  详细解决方案

急 有些难度的有关问题 高手赐教 万分感谢

热度:96   发布时间:2016-04-24 05:51:07.0
急急急急急 有些难度的问题 高手赐教 万分感谢
有一个ORACLE表,里面有201列,第一列是时间(datetime),从第2列到201列是温差 格式是temp_1 temp_2 temp_3 一直到temp_200,

共有12898行数据。其中一个时间点对应一条数据。

现在表结构发生了改变,新的表只有三列,时间datetime,房间号room_num(房间号是从1到200),温度差hl_temp,温度差hl_temp的值对应原来表当中温差值。

现在要求 新的表一个时间点对应200条数据了,即分别对应原先表中200个温差的值,

房间号为1的温度差(hl_temp)的值对应原表中temp_1的值,房间号为2的温度差(hl_temp)的值对应原表中temp_2的值,以此类推,房间号为200的的温度差(hl_temp)的值对应原表中temp_200的值。

即原来有 201列,12898行,现在要求转换为 3列 datetime,room_num,hl_temp,12898*200行的表,

请教高手赐教,如何CODE.

万分感谢,高手赐教。



------解决方案--------------------
如果我上述推断为真,那么有2种方法解决这个问题。
方法一:通过手工写SQL来实现,不过这个方法很笨:
SQL code
INSERT INTO NEWTABLE(SELECT 1,DATETIME,temp_1 FROM OLDTABLE );INSERT INTO NEWTABLE(SELECT 2,DATETIME,temp_2 FROM OLDTABLE );...INSERT INTO NEWTABLE(SELECT 200,DATETIME,temp_200 FROM OLDTABLE );
------解决方案--------------------
方法2存储过程的代码,其中TEST表为你的老表,TEST2是你建立的新表
TEST2的建表语句为CREATE TABLE TEST2(DATETIME DATE,ROOM NUMBER,TEMP VARCHAR2(20))
SQL code
--存储过程代码CREATE OR REPLACE PROCEDURE TEST99 IS I INTEGER;STRTEMP VARCHAR2(20);STRTEMP1 VARCHAR2(20);STRSQL VARCHAR2(4000); BEGIN     STRTEMP:='TEMP_';     I:=1;     WHILE I<201 LOOP     BEGIN     STRTEMP1:=STRTEMP||I;     STRSQL:='INSERT INTO TEST2(SELECT DATETIME,'||I||','||STRTEMP1||' FROM TEST)';     EXECUTE IMMEDIATE STRSQL;     I:=I+1;     END;     END LOOP;     COMMIT;END;
  相关解决方案