文章详情页
Oracle中实现行列互转的方法分享
浏览:2日期:2023-09-15 20:49:58
目录一、使用Case when 实现列转为行(多行一列-->一行多列)1.1、实现效果1.2、列转行(多行一列-->一行多列)二、使用 Case When 实现行转列(一行多列-->多行一列)2.1、实现效果2.2、行转列(一行多列-->多行一列)三、将结果集转为一行四、将结果集转为多行一、使用Case when 实现列转为行(多行一列-->一行多列)1.1、实现效果
①原表效果
②实现将Course课程列内容转为行效果【实现将每个人员的课程信息合成一行,且获取到课程总分】
sql语句
SELECT NAME,MAX(CASE WHEN COURSE='语文' THEN SCORE END) '语文',MAX(CASE WHEN COURSE='数学' THEN SCORE END) '数学',MAX(CASE WHEN COURSE='英语' THEN SCORE END) '英语',MAX(CASE WHEN COURSE='物理' THEN SCORE END) '物理',SUM(SCORE) '总分' FROM stu GROUP BY NAME;二、使用 Case When 实现行转列(一行多列-->多行一列)2.1、实现效果①原表效果
②实现将多个数字列转为一列效果
sql语句
SELECT NAME, CASE WHEN LV = 1 THEN '语文' --常量 WHEN LV = 2 THEN '数学' --常量 WHEN LV = 3 THEN '英语' --常量 WHEN LV = 4 THEN '物理' --常量 END 科目, CASE WHEN LV = 1 THEN langu --列名 WHEN LV = 2 THEN math--列名 WHEN LV = 3 THEN english--列名 WHEN LV = 4 THEN pycial--列名 END 成绩 FROM ( SELECT * FROM course, (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 4) ) --成绩对应的列数ORDER BY 1, 2;三、将结果集转为一行①查询到每个部门的人数
--查询每个部门的人数 SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO ORDER BY 1;②将查询到的每个部门人数的结果集【转为一行】
--将上面的结果转为一行,可以使用 SUM 或者 COUNT 来求出。 SELECT SUM(CASE WHEN DEPTNO = 10 THEN 1 END) D_10,SUM(CASE WHEN DEPTNO = 20 THEN 1 END) D_20,SUM(CASE WHEN DEPTNO = 30 THEN 1 END) D_30 FROM EMP; --也可以使用下面的方法。 SELECT CASE WHEN DEPTNO = 10 THEN CN END D_10,CASE WHEN DEPTNO = 20 THEN CN END D_20,CASE WHEN DEPTNO = 30 THEN CN END D_30 FROM (SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO); --和刚讲的一样,生成了三行三列数据,使用 MAX 来获取。 SELECT MAX(CASE WHEN DEPTNO = 10 THEN CN END) D_10,MAX(CASE WHEN DEPTNO = 20 THEN CN END) D_20,MAX(CASE WHEN DEPTNO = 30 THEN CN END) D_30 FROM (SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO);四、将结果集转为多行到此这篇关于Oracle中实现行列互转的方法分享的文章就介绍到这了,更多相关Oracle行列互转内容请搜索好吧啦网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好吧啦网!
相关文章:
排行榜