通过以下存储过程可以将表A转换为表B:
---------------------------------------------------------------行转列的存储过程
CREATE OR REPLACE PROCEDURE P_STU ---存储过程名称 P_STU 存储过程没有返回结果的
IS ---声明变量
V_SQL VARCHAR2(2000); --V_SQL 变量名 Varchar2 类型 用于拼接SQL语句
CURSOR CLASS_CURSOR IS SELECT DISTINCT CLASS FROM student;
--游标循环使用 游标声明 CURSOR 定义游标名称 CLASS_CURSOR 查询语句 SELECT DISTINCT CLASS FROM student;
--distinct 唯一值
--查询:class 通过 student表
BEGIN
V_SQL := 'SELECT name'; --初始值赋值 :=
--循环语句开始
FOR C IN CLASS_CURSOR LOOP --循环参数 C 在游标里循环 游标:CLASS_CURSOR
--拼接字符串 用decode 函数 sum(decode(条件,参数,值1,值2) 行转列 条件满足(等于)参数 返回 值1 ,不满足(不等于)返回 值2
V_SQL := V_SQL || ',' || 'SUM(DECODE(CLASS,''' || C.CLASS ||
''',score,0)) AS ' || C.CLASS;
END LOOP;
--结束循环
V_SQL := V_SQL || ' FROM student GROUP BY name';
--DBMS_OUTPUT.PUT_LINE(V_SQL);
V_SQL := 'CREATE OR REPLACE VIEW RESULT AS '|| V_SQL; --创建视图
--DBMS_OUTPUT.PUT_LINE(V_SQL);
EXECUTE IMMEDIATE V_SQL; -- 执行动态sql 语句
END;
----------------------------------------------------------------结果
表A:
表B:
现在我想将表B逆转回表A,请教各位语句该怎么写才能达到目的呢(用存储转换动态列的方式)?