sql将查询结果行转列
行转列即把多行内容合并到一行显示
-
oracle的行聚合函数
listagg(要合并的字段,‘分隔符’) within group (order by 排序字段)
--有一学生表student(班级号classId,分组号groupId,学号studentId,姓名name) --构造表: create table student(classId varchar(5),groupId varchar(5),studentId varchar(10),name varchar(10)) insert into student SELECT '一班','1组','200','程长新' from dual union all SELECT '一班','1组','201','李丽云' from dual union all SELECT '一班','2组','202','程' from dual union all SELECT '一班','2组','203','长' from dual union all SELECT '一班','3组','204','新' from dual --现在要查看每一组所有的学生,并要求将一个组中的学生放在一行展示,学生之间用逗号隔开 select groupId, listagg(name,',') within group(order by 学号studentId) students from student group by groupid --结果------------------------ 1组 程长新,李丽云 2组 程,长 3组 新如上,这是listagg作为聚合函数使用,每组返回一行结果
listagg还可以作为分析函数使用,每一条记录返回一个结果
select groupId, studentid, listagg(name,',') within group(order by studentId) over(partition by groupid) students from student --结果------------------------ 1组 200 程长新,李丽云 1组 201 程长新,李丽云 2组 202 程,长 2组 203 程,长 3组 204 新 -
mysql的行聚合函数
group_concat(要合并的字段1,拼接的字段2,字段3...)
有下表

现要求查询每个学生都选了哪些课程,要求课程在一行显示
select ctea_name,group_concat(course_name) courses from class_course group by ctea_name
--结果-----------
侯书田 操作系统
程长新 算法分析与设计,Oracle,SqlServer
肖浩萍 java基础,JSP,软件工程,计算机专业英语
又要求要同时展示课程号
select ctea_name,group_concat(course_id,':',course_name) courses from class_course group by ctea_name
--结果-------------
侯书田 0006:操作系统
程长新 0003:算法分析与设计,0004:Oracle,0005:SqlServer
肖浩萍 0000:java基础,0001:JSP,0002:软件工程,0007:计算机专业英语

浙公网安备 33010602011771号