oracle 行列转换
??
一、建表与插入数据1.1、建表 1 create table kecheng 2 ( 3 id NUMBER, 4 name VARCHAR2(20),128);line-height:1.5;font-family:'Courier New';font-size:12px;"> 5 course 6 score NUMBER 7 ); 8 insert into kecheng (id,name,course,score) 9 values (1,'张三',0);line-height:1.5;font-family:'Courier New';font-size:12px;">语文6710 11 数学7612 13 英语4314 15 历史5616 17 化学1118 19 2,0);line-height:1.5;font-family:'Courier New';font-size:12px;">李四5420 21 8122 23 6424 25 9326 27 2728 29 3,0);line-height:1.5;font-family:'Courier New';font-size:12px;">王五2430 31 2532 33 834 35 4536 37 138 commit; 二、固定行列转换 2.1、Decode方式 SELECT ID,NAME,SUM(DECODE(course,score,0);line-height:1.5;font-family:'Courier New';font-size:12px;font-weight:bold;">0)) 语文,--这里使用max,min都可以 0)) 数学,0);line-height:1.5;font-family:'Courier New';font-size:12px;">)) 英语,0);line-height:1.5;font-family:'Courier New';font-size:12px;">)) 历史,0);line-height:1.5;font-family:'Courier New';font-size:12px;">)) 化学 FROMGROUP BY ID,NAME 2.2、Case方式 MAX(CASE WHEN course=' THEN score ELSE 0 END) 语文,0);line-height:1.5;font-family:'Courier New';font-size:12px;">) 数学,0);line-height:1.5;font-family:'Courier New';font-size:12px;">) 英语,0);line-height:1.5;font-family:'Courier New';font-size:12px;">) 历史,0);line-height:1.5;font-family:'Courier New';font-size:12px;">) 化学 结果与上方一样 2.3、wmsys.wm_concat行列转换函数
|| :'||score) course 三、动态转换 3.1、使用PL/SQL DECLARE 存放最终的SQL LV_SQL 3000); 存放连接的SQL SQL_COMMOND 定义游标 CURSOR CUR IS SELECT COURSE FROM KECHENG COURSE; BEGIN 定义查询开头 SQL_COMMOND := SELECT NAME '; FOR I IN CUR LOOP 将结果相连接 SQL_COMMOND := SQL_COMMOND ''' || I.COURSE || '''' I.COURSE; DBMS_OUTPUT.PUT_LINE(SQL_COMMOND); LOOP; SQL_COMMOND : from KECHENG group by name; LV_SQL :INSERT INTO temp_ss SQL_COMMOND; DBMS_OUTPUT.PUT_LINE(LV_SQL); EXECUTE IMMEDIATE LV_SQL; END;temp_ss 表 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |