暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【干货攻略】达梦数据库行转列

达梦E学 2025-05-29
838
引 言

在日常工作中可能会遇到行转列的需求。在DM数据库中,行转列的操作通常可以通过多种方法实现,例如使用case when语句或者pivot 子句。下面我将介绍两种常见的方法来实现行转列的查询。
本章内容已在如下环境上测试:
①数据库版本:达梦DM8
相关关键字:行转列

——正文——

01

 构造数据并测试

构造表:
    SQL> create table courses (
    stname varchar(30),
    cname varchar(30),
    score int
    );
    SQL> insert into courses values('苏华','语文',90);
    SQL> insert into courses values('苏华','数学',95);
    SQL> insert into courses values('苏华','英语',96);
    SQL> insert into courses values('于倩','语文',87);
    SQL> insert into courses values('于倩','数学',96);
    SQL> insert into courses values('于倩','英语',91);
    SQL> insert into courses values('谢文龙','语文',83);
    SQL> insert into courses values('谢文龙','数学',98);
    SQL> insert into courses values('谢文龙','英语',89);
    SQL> commit;
    查询结果如下图所示:

    02

     行转列方法

    方法1:使用case when子句

      select stname,
      sum(case when cname = '语文' THEN score ELSE 0 ENDAS "语文",
      sum(case when cname = '数学' THEN score ELSE 0 ENDAS "数学",
      sum(case when cname = '英语' THEN score ELSE 0 ENDAS "英语"
      from courses
      group by stname;
      方法2:使用pivot 子句
        SQL> select * from courses
        pivot
        (
        sum(score)
        for cname in 
        ('语文','数学','英语')
        )
        as courses;
        查询结如下图所示:


        总结


        以上就是达梦数据库行转列的方法。



        END


        想要了解更多往期干货,可访问页面最下方#达梦技术干货攻略#合集或下方相关分享。在此邀请更多学员参与“达梦技术干货投稿活动”,稿件获选后将在达梦“干货分享”专栏进行发布,欢迎来稿!


        往期回顾


        【干货】达梦数据库日志监控与分析(二)

        【干货】SQL优化案例-索引的回表与过滤

        【开班】达梦数据库工程师认证课程2025年6月
        【师培】达梦数据库师资赋能培训高级研修班(海南专场)

        【师培】职业院校教师国产数据库技术应用能力提升研修班



        达梦E学
        达梦数据  学习园地

        作者:林夕


        文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论