千家信息网

Oracle 合并多行记录为一行

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,1、实际需求情况如下:描述:上述表中,某一位同学有多门课程和成绩,现在希望有一条SQL语句,将课程名称和成绩合并在一起显示,如下:描述:将这位同学的全部课程和成绩用一个字段表示,里面包括全部的课程名称
千家信息网最后更新 2025年02月01日Oracle 合并多行记录为一行

1、实际需求情况如下:

描述:上述表中,某一位同学有多门课程和成绩,现在希望有一条SQL语句,将课程名称和成绩合并在一起显示,如下:




描述:将这位同学的全部课程和成绩用一个字段表示,里面包括全部的课程名称和考试成绩



2、问题分析

解决这个问题可以采用创建function的办法,去合并这2个字段,但这样太麻烦,由于是采用的Oracle10g,故可以采用函数wmsys.wm_concat()实现此功能。

3、解决方案

SQL:

第一步先写一个视图view_ly_sjdxpt_jwcj,合并这2个字段

SQL代码:

createorreplaceviewview_ly_sjdxpt_jwcj as

select

xh hm,

kcmc||zscj as kc_cj

from dcuser.ly_xs_bzks_cjb b;

结果:




第二步再写一个视图,使用wmsys.wm_concat()将KC_CJ字段合并

SQL代码:

createorreplaceviewview_ly_sjdxpt_jwcj_kz asselect hm,wmsys.wm_concat(kc_cj) as kccj from view_ly_sjdxpt_jwcj groupby hm;


结果:




第三步代入实际需要的sql中使用即可:

SQL代码:

select distinct

'教务成绩' dxlb,

xh hm,

(select lxdh fromdcuser.LY_XS_BZKS_XSJBXX where xh=b.xh) sjhm,

to_char(sysdate,'yyyyMMddHH24miss') crsj,

xm||'同学您好,这个学期您各科成绩如下:'||c.kccj as nr,

'' bz,

''fssj

fromdcuser.ly_xs_bzks_cjb b

leftouterjoin DCUSER_KZ.VIEW_LY_SJDXPT_JWCJ_KZ c on b.xh=c.hm

结果:



成绩 字段 课程 代码 同学 结果 名称 实际 视图 问题 您好 函数 办法 功能 学期 情况 教务 方案 解决方案 语句 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 重庆手机软件开发靠谱吗 数据库default默认值为空 软件开发架构是基于什么 软件工程项目对数据库的需求 如何连接服务器 油猴插件怎么改服务器 如何存取数据库 服务器给手机发验证码 潮州专业软件开发维修电话 天津大学网络安全考研 战地5 可以换服务器吗 虚拟主机建设网站数据库教程 医保网络安全领导小组 数据库什么阶段画数据流图 服务器虚拟化 教程 四川大学网络安全课程 企业网络安全认证证书 网络安全管理讲座开场白 天谕手游安卓一区服务器找不到 多大才算大数据库 微信是一种网络技术的运用 厦门dns服务器地址 物联设备网络安全监测系统的研发 计算机考试模拟器数据库 宁夏华为服务器虚拟化哪家便宜 软件开发一个项目提成多少 土木工程去软件开发 软件开发费用计算标准深圳 成都市网络安全中心 数据库中间件有哪些 omeba
0