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:计算机专业英语
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤