加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle 行列转换

发布时间:2020-12-12 13:58:56 所属栏目:百科 来源:网络整理
导读:?? 一、建表与插入数据 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 va
??

一、建表与插入数据

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

2.4、使用over(partition by t.u_id)用法

NAME,128);line-height:1.5;font-family:'Courier New';font-size:12px;">||score) OVER (PARTITION BY NAME) FROM kecheng

三、动态转换

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 表

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读