zoukankan      html  css  js  c++  java
  • Oracle查询如何才能行转列?-sunziren

      原创文章,转载务必注明出处。


      今天工作的时候,碰到一个问题,涉及oracle行转列,用了半小时解决,因此在这里写个博客记录一下解决办法。

      原数据库表的数据是:

      

       想要达到的效果是:

      

       经过思考,这是一个oracle行转列的操作,根据xn,qxdm,nj这三列值来分组查询所有的数据,把xn,qxdm,nj三列相同的数据看为一行。

      在百度上找了半小时sql,自己又调试了半个小时,终于把这个效果实现了,sql如下:

     1 select * from (select xn,qxdm,nj,xk,gxsj,cbbb from test) t pivot(
     2     max(t.cbbb) for xk in (
     3         '道德与法制' as 道德与法制,
     4         '语文' as 语文,
     5         '数学' as 数学,
     6         '音乐' as 音乐,
     7         '美术' as 美术,
     8         '科学' as 科学,
     9         '英语' as 英语,
    10         '书法' as 书法,
    11         '信息技术' as 信息技术
    12     ) ) where 1=1

      核心是利用了oracle的pivot函数,问题至此解决,写下次过程以便他人参考。

      小插曲,项目中用了这个Sql后,一直报错,可在PLSQL能够执行。经过检查发现是数据源druid 1.1.18版本不支持Oracle For关键字,升级成1.1.21就好了。


      原创文章,转载务必注明出处。

  • 相关阅读:
    redis:aof恢复与rdb服务器间迁移
    redis的主从服务器配置
    redis:消息发布与订阅频道
    redis:hash哈希类型的操作
    redis:order set有序集合类型的操作(有序集合)
    redis:set集合类型的操作(无序集合)
    redis:list列表类型的操作
    C#之多线程
    C# 操作FTP
    C# 导出导入TXT文件
  • 原文地址:https://www.cnblogs.com/sunziren/p/12192735.html
Copyright © 2011-2022 走看看