xmlagg函数的使用--课表视图
需求
将老师一周中同一大节的课表信息整理到同一条记录里,不同星期对应不同的列。(涉及到字符串拼接、行转列)
常见的行转列函数有vm_concat、listagg、xmlagg等,但是oracle12g不支持vm_concat,而且前两个函数在拼接字符串的时候容易出现拼接结果过长、字符串缓冲区过小等问题,难搞。xmlagg就可以完美解决这个问题,拼接字段中出现null也不影响,唯一的不足就是多个null拼接时,xmlagg并不能自动省去,最后需要处理下多余的拼接符号,不然难看。
xmlagg函数用法
xmlagg函数需要将输入的值转换为xml,处理返回结果也是xml,最后再用getclobval()获取colb类型的结果。
xmlagg(xmlelement(表名, 输入值1,输入值2) order by 参数).extract('//text()').getclobval()
输入值就是要拼接的字段和连接符,顺序随意,xmlagg就是把两个输入值拼在一起,连接符在前在后都一样,最后都是要处理下多余的字符的
listagg函数用法
listagg(参数, '分隔符') within group(order by 参数)
vm_concat函数用法
vm_concat(参数)
CREATE OR REPLACE VIEW LY_VIEW_MHZS_JSKCB11 AS
SELECT
XN,XQ,JC,GH,DSZ,
--将同一节次的课程信息进行列转行并去除多余的连接符
TRIM(',' FROM XMLAGG(XMLELEMENT(T, ',', T.AKC) ORDER BY XN,XQ,JC,GH,DSZ).EXTRACT('//text()').GETCLOBVAL()) AS AKC,
TRIM(',' FROM XMLAGG(XMLELEMENT(T, ',', T.BKC) ORDER BY XN,XQ,JC,GH,DSZ).EXTRACT('//text()').GETCLOBVAL()) AS BKC,
TRIM(',' FROM XMLAGG(XMLELEMENT(T, ',', T.CKC) ORDER BY XN,XQ,JC,GH,DSZ).EXTRACT('//text()').GETCLOBVAL()) AS CKC,
TRIM(',' FROM XMLAGG(XMLELEMENT(T, ',', T.DKC) ORDER BY XN,XQ,JC,GH,DSZ).EXTRACT('//text()').GETCLOBVAL()) AS DKC,
TRIM(',' FROM XMLAGG(XMLELEMENT(T, ',', T.EKC) ORDER BY XN,XQ,JC,GH,DSZ).EXTRACT('//text()').GETCLOBVAL()) AS EKC,
TRIM(',' FROM XMLAGG(XMLELEMENT(T, ',', T.FKC) ORDER BY XN,XQ,JC,GH,DSZ).EXTRACT('//text()').GETCLOBVAL()) AS FKC,
TRIM(',' FROM XMLAGG(XMLELEMENT(T, ',', T.GKC) ORDER BY XN,XQ,JC,GH,DSZ).EXTRACT('//text()').GETCLOBVAL()) AS GKC
FROM (SELECTGH, --工号A.XN||'-'||TO_CHAR(A.XN+1) AS XN, --学年CASE JC IS NOT NULL THEN '第'||JC||'节' ELSE '【-】' END AS JC, --节次XQ , --学期DSZ, --单双周--拼接课程信息CASE WHEN XQJ='1' THEN '第'||ZC||'周【'||KCMC||'】'||SKDD||B.BJMC ELSE NULL END AS AKC,--星期一课程CASE WHEN XQJ='2' THEN '第'||ZC||'周【'||KCMC||'】'||SKDD||B.BJMC ELSE NULL END AS BKC,--星期二课程CASE WHEN XQJ='3' THEN '第'||ZC||'周【'||KCMC||'】'||SKDD||B.BJMC ELSE NULL END AS CKC,--星期三课程CASE WHEN XQJ='4' THEN '第'||ZC||'周【'||KCMC||'】'||SKDD||B.BJMC ELSE NULL END AS DKC,--星期四课程CASE WHEN XQJ='5' THEN '第'||ZC||'周【'||KCMC||'】'||SKDD||B.BJMC ELSE NULL END AS EKC,--星期五课程CASE WHEN XQJ='6' THEN '第'||ZC||'周【'||KCMC||'】'||SKDD||B.BJMC ELSE NULL END AS FKC,--星期六课程CASE WHEN XQJ='7' THEN '第'||ZC||'周【'||KCMC||'】'||SKDD||B.BJMC ELSE NULL END AS GKC--星期日课程FROM JSKB ALEFT JOIN(--拼接班级信息SELECT A.XN,A.XQ,A.SKBJ,SUBSTR(XMLAGG(XMLELEMENT(A, ',', A.BJMC) ORDER BY A.XN,A.XQ,A.SKBJ).EXTRACT('//text()').GETCLOBVAL(),2) AS BJMCFROM BJXX AGROUP BY A.XN,A.XQ,A.SKBJ) B ON A.SKBJ=B.SKBJ AND A.XN=B.XN AND A.XQ=B.XQORDER BY A.XN,A.XQ,A.ZJJS_GH,A.JCINFO
) T
GROUP BY XN,XQ,JC,GH,DSZ;
xmlagg函数的使用--课表视图相关推荐
- MySQL学习思维导图(MySQL简介、SQL基础命令、约束、单表查询、多表查询、内置函数、存储过程、视图、事务、索引)
MySQL学习思维导图 内容包括:MySQL简介.SQL基础命令.约束.单表查询.多表查询.内置函数.存储过程.视图.事务.索引 文章目录 MySQL学习思维导图 一.MySQL简介 二.SQL基础命 ...
- mysql-创建函数,存储过程以及视图
为什么80%的码农都做不了架构师?>>> 1.创建函数 mysql>delimiter //mysql>create function 函数名(参数1 参数1类型, ...
- SQL常用函数、索引、视图、序列
一.SQL常用函数 1.sysdate:当前的日期包含时间 select sysdate from dual; 2.length(str)函数:返回字符串的长度,str表示一个字符串 select l ...
- mysql视图中调用函数写法_从视图中调用函数
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- oracle exec编译失效,编译oracle失效的函数、存储过程、视图等
进行oracle开发时常常为不时失效的存储过程,函数等苦恼,于是下决心解决这个问题,东查西找,找到一个好东东,在基础上又修改了一下,问题终于被我解决了. 1.建立一个存储过程 CREATE OR RE ...
- sqlserver检索函数、存储过程、视图 中的关键字
select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped ...
- 用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 视图函数 在 views.py 文件中定义视图函数 定义右侧边栏的视图 ...
- python视图函数是什么_python项目Django(视图函数)
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- Flask框架 之abort、自定义错误、视图函数返回值与jsonify
一.abort函数 使用abort函数可以立即终止视图函数的执行,并可以返回给前端特定的值. abort函数的作用: 1.传递状态码,必须是标准的http状态码 2.传递响应体信息 @app.rout ...
最新文章
- 【偶尔一道ctf】xctf adword mobile easy-apk
- c#/.net 循序渐进理解-委托
- CentOS中启动Jar包、后台启动、查看输出日志、查看服务进程、杀死进程
- 五、队列(Queue)
- 牛客题霸 [没有重复项数字的所有排列] C++题解/答案
- 程序员,35岁就可能被替换的职业,遇到好的领导多么重要
- ceph rbd 常用命令使用
- VC文档与视图结构学习总结
- 【2012百度之星/初赛上】小小度刷礼品
- 科研神器----数据提取软件WebPlotDigitizer的使用
- 【Linux】MySQL常用命令
- TFS2010中如何添加用户
- matlab sil,丰田使用高精度发动机模型和SIL+M前置开发发动机控制系统
- 标准二维表问题 (卡特兰数)
- 生肖android编程,android小程序,根据生日年份计算出生肖
- 通过wireshark抓包对nmap一些原理分析
- 家长们,居家网课这样做
- FRECO联盟探营:未来还看这些“小字辈”
- 隐藏IDEA的行首的黄色小灯泡
- php解码 u7f3a u5c11,认识 Linux
热门文章
- Java获取上海期货交易所数据_上海期货交易所价格示例代码
- 点云数据笔记:点云与生成鸟瞰图
- strocli64 源码_storcli64和smartctl定位硬盘的故障信息
- 「技术分享」汽车检测移动机器人应用,科聪赋能智能数字化检测!
- 重磅 | 深度学习“四大名著”发布!爱可可推荐!
- 好用的三维绘图软件CREO用来绘制圆角和倒角
- vad唤醒算法_唤醒算法经济后公司需要考虑的问题
- uniapp实现微信扫二维码进行核销
- 企业如何搭建管理驾驶舱 | 推荐收藏
- 虚拟机下安装cad2006和南方cass7.0