星空网 > 软件开发 > 数据库

Oracle行列转换

一、建表与插入数据

1.1、建表

 1 create table kecheng 2 ( 3  id   NUMBER, 4  name  VARCHAR2(20), 5  course VARCHAR2(20), 6  score NUMBER 7 ); 8 insert into kecheng (id, name, course, score) 9 values (1, '张三', '语文', 67);10 insert into kecheng (id, name, course, score)11 values (1, '张三', '数学', 76);12 insert into kecheng (id, name, course, score)13 values (1, '张三', '英语', 43);14 insert into kecheng (id, name, course, score)15 values (1, '张三', '历史', 56);16 insert into kecheng (id, name, course, score)17 values (1, '张三', '化学', 11);18 insert into kecheng (id, name, course, score)19 values (2, '李四', '语文', 54);20 insert into kecheng (id, name, course, score)21 values (2, '李四', '数学', 81);22 insert into kecheng (id, name, course, score)23 values (2, '李四', '英语', 64);24 insert into kecheng (id, name, course, score)25 values (2, '李四', '历史', 93);26 insert into kecheng (id, name, course, score)27 values (2, '李四', '化学', 27);28 insert into kecheng (id, name, course, score)29 values (3, '王五', '语文', 24);30 insert into kecheng (id, name, course, score)31 values (3, '王五', '数学', 25);32 insert into kecheng (id, name, course, score)33 values (3, '王五', '英语', 8);34 insert into kecheng (id, name, course, score)35 values (3, '王五', '历史', 45);36 insert into kecheng (id, name, course, score)37 values (3, '王五', '化学', 1);38 commit;

Oracle行列转换

二、固定行列转换

2.1、Decode方式

 

SELECT ID,NAME,SUM(DECODE(course,'语文',score,0)) 语文,--这里使用max,min都可以SUM(DECODE(course,'数学',score,0)) 数学,SUM(DECODE(course,'英语',score,0)) 英语,SUM(DECODE(course,'历史',score,0)) 历史,SUM(DECODE(course,'化学',score,0)) 化学FROM kechengGROUP BY ID ,NAME

 

Oracle行列转换

 

 

2.2、Case方式

 

SELECT ID,NAME,MAX(CASE WHEN course='语文' THEN score ELSE 0 END) 语文,MAX(CASE WHEN course='数学' THEN score ELSE 0 END) 数学,MAX(CASE WHEN course='英语' THEN score ELSE 0 END) 英语,MAX(CASE WHEN course='历史' THEN score ELSE 0 END) 历史,MAX(CASE WHEN course='化学' THEN score ELSE 0 END) 化学FROM kechengGROUP BY ID ,NAME

 

结果与上方一样

2.3、wmsys.wm_concat行列转换函数

 

SELECT ID,NAME,wmsys.wm_concat(course || ':'||score) courseFROM kechengGROUP BY ID ,NAME;

 

Oracle行列转换

 

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

 

SELECT NAME,wmsys.wm_concat(course ||score) OVER (PARTITION BY NAME)FROM kecheng

 

Oracle行列转换

 

 

三、动态转换

3.1、使用PL/SQL

DECLARE --存放最终的SQL LV_SQL VARCHAR2(3000); --存放连接的SQL SQL_COMMOND VARCHAR2(3000); --定义游标 CURSOR CUR IS  SELECT COURSE FROM KECHENG GROUP BY COURSE;BEGIN --定义查询开头 SQL_COMMOND := 'SELECT NAME '; FOR I IN CUR LOOP  --将结果相连接  SQL_COMMOND := SQL_COMMOND || ' ,SUM(DECODE(course,''' || I.COURSE ||          ''',score,0)) ' || I.COURSE;  DBMS_OUTPUT.PUT_LINE(SQL_COMMOND); END LOOP; SQL_COMMOND := 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 表
Oracle行列转换


 




原标题:Oracle行列转换

关键词:oracle

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

减肥药丸冲上爆品榜三,TikTok美国小店热销商品周榜发布!:https://www.goluckyvip.com/news/21002.html
TikTok跨境电商:Tik Tok海外版抖音新手注册开店详细的全流程操作:https://www.goluckyvip.com/news/21003.html
Lazada店群模式运营技巧:https://www.goluckyvip.com/news/21004.html
虾皮新手运营技巧:https://www.goluckyvip.com/news/21005.html
虾皮Shopee十大运营方法!:https://www.goluckyvip.com/news/21006.html
Shopee(虾皮)精细化运营和选品技巧,干货分享:https://www.goluckyvip.com/news/21007.html
23点聊电商:新质生产力加速数字贸易发展 卓尔智联集团实现营收利润双增长 :https://www.kjdsnews.com/a/1836411.html
南京浦口都有什么好玩的地方 南京浦口都有什么好玩的地方推荐:https://www.vstour.cn/a/363180.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流