一、建表与插入数据
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
三、动态转换
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 表