需求

将老师一周中同一大节的课表信息整理到同一条记录里,不同星期对应不同的列。(涉及到字符串拼接、行转列)

常见的行转列函数有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函数的使用--课表视图相关推荐

  1. MySQL学习思维导图(MySQL简介、SQL基础命令、约束、单表查询、多表查询、内置函数、存储过程、视图、事务、索引)

    MySQL学习思维导图 内容包括:MySQL简介.SQL基础命令.约束.单表查询.多表查询.内置函数.存储过程.视图.事务.索引 文章目录 MySQL学习思维导图 一.MySQL简介 二.SQL基础命 ...

  2. mysql-创建函数,存储过程以及视图

    为什么80%的码农都做不了架构师?>>>    1.创建函数 mysql>delimiter //mysql>create function 函数名(参数1 参数1类型, ...

  3. SQL常用函数、索引、视图、序列

    一.SQL常用函数 1.sysdate:当前的日期包含时间 select sysdate from dual; 2.length(str)函数:返回字符串的长度,str表示一个字符串 select l ...

  4. mysql视图中调用函数写法_从视图中调用函数

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. oracle exec编译失效,编译oracle失效的函数、存储过程、视图等

    进行oracle开发时常常为不时失效的存储过程,函数等苦恼,于是下决心解决这个问题,东查西找,找到一个好东东,在基础上又修改了一下,问题终于被我解决了. 1.建立一个存储过程 CREATE OR RE ...

  6. sqlserver检索函数、存储过程、视图 中的关键字

    select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped ...

  7. 用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 视图函数 在 views.py 文件中定义视图函数 定义右侧边栏的视图 ...

  8. python视图函数是什么_python项目Django(视图函数)

    一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...

  9. Flask框架 之abort、自定义错误、视图函数返回值与jsonify

    一.abort函数 使用abort函数可以立即终止视图函数的执行,并可以返回给前端特定的值. abort函数的作用: 1.传递状态码,必须是标准的http状态码 2.传递响应体信息 @app.rout ...

最新文章

  1. 【偶尔一道ctf】xctf adword mobile easy-apk
  2. c#/.net 循序渐进理解-委托
  3. CentOS中启动Jar包、后台启动、查看输出日志、查看服务进程、杀死进程
  4. 五、队列(Queue)
  5. 牛客题霸 [没有重复项数字的所有排列] C++题解/答案
  6. 程序员,35岁就可能被替换的职业,遇到好的领导多么重要
  7. ceph rbd 常用命令使用
  8. VC文档与视图结构学习总结
  9. 【2012百度之星/初赛上】小小度刷礼品
  10. 科研神器----数据提取软件WebPlotDigitizer的使用
  11. 【Linux】MySQL常用命令
  12. TFS2010中如何添加用户
  13. matlab sil,丰田使用高精度发动机模型和SIL+M前置开发发动机控制系统
  14. 标准二维表问题 (卡特兰数)
  15. 生肖android编程,android小程序,根据生日年份计算出生肖
  16. 通过wireshark抓包对nmap一些原理分析
  17. 家长们,居家网课这样做
  18. FRECO联盟探营:未来还看这些“小字辈”
  19. 隐藏IDEA的行首的黄色小灯泡
  20. php解码 u7f3a u5c11,认识 Linux

热门文章

  1. Java获取上海期货交易所数据_上海期货交易所价格示例代码
  2. 点云数据笔记:点云与生成鸟瞰图
  3. strocli64 源码_storcli64和smartctl定位硬盘的故障信息
  4. 「技术分享」汽车检测移动机器人应用,科聪赋能智能数字化检测!
  5. 重磅 | 深度学习“四大名著”发布!爱可可推荐!
  6. 好用的三维绘图软件CREO用来绘制圆角和倒角
  7. vad唤醒算法_唤醒算法经济后公司需要考虑的问题
  8. uniapp实现微信扫二维码进行核销
  9. 企业如何搭建管理驾驶舱 | 推荐收藏
  10. 虚拟机下安装cad2006和南方cass7.0