注册
DM8DCA考试认证——行转列实例分享
培训园地/ 文章详情 /

DM8DCA考试认证——行转列实例分享

DM_HZH 2026/01/04 82 0 0

最近通过了国产数据库达梦的DCA认证考试,也算是在国产数据库领域上面的一个小小成就。回顾本次考试,也是很全面的查考了数据库的基础知识和常见的操作。包括数据库的安装部署、SQL开发以及dm驱动的使用等等,让我印象比较深刻的一道考题是一道视图题的编写,因为当时的想法是用行转列,但一直没有很明确的思路选择战略性放弃了。在这里做一个考后复盘。
题干大概是这样的:查询平均分85分以上的学生以及该学生的各科成绩,展示学生姓名、课程名称、分数、平均分,按平均分倒序排列。在这道题之前,需要先创建三张基表(学生信息、课程信息、成绩表),然后导入数据这些步骤。我当时的想法就是用行转列,把每个课程名当成一列,视图的每一行数据,就是由学生姓名,该学生所有课程的成绩,以及平均分组成,大概是这样(以下视图是本地测试环境的),第一种方法可以使用PIVOT子句,将COURSE_NAME列中的课程所对应的行数据转换为列进行展示。

image.png
第二种方式可以通过利用CASEWHEN语句,也可也达到同样的效果。
image.png
后面考虑到一个问题,科目的数量是固定而且数量不多的话,用以上两种方式列出所有科目都可以达到效果。但如果是在生产环境中,例如课程信息这张基表会随着学年发生变化,删减或者增加课程数目,那这张视图又得重新维护,有什么方式可以让视图处理科目不固定的情况呢?我想到的一个方式就是使用动态SQL来处理,查出所有的课程然后通过CASEWHEN语句进行拼接。这个就要结合存储过程进行处理了,结合for循环,然后拼接完成的建立视图的SQL,大致的思路如下:
首先是for循环
image.png
然后再拼接完整的SQL
image.png
存储过程写完后,可以通过数据库的定时任务,按照业务实际的需求,定时执行该存储过程去更新视图。
以上就是行转列的分享,通过DCA考试也让我知道自己的不足,但是达梦社区提供了丰富的学习资源,在后续的工作学习中也要养成查阅手册以及及时整理复盘的习惯。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服