相关文章推荐
狂野的电池  ·  C#如何控制方法的执行时间,超时则强制退出方 ...·  11 月前    · 
想表白的领结  ·  Handler 接收Parcelable ...·  1 年前    · 
慷慨大方的钥匙扣  ·  神经网络轴承故障诊断_一维卷积神经网络详解- ...·  1 年前    · 
精明的手套  ·  在C#中执行cmd指令时,因空格导致执行出错 ...·  1 年前    · 
气宇轩昂的蜡烛  ·  window.event.srcelemen ...·  1 年前    · 
Code  ›  Oracle行转列语法总结 - 墨天轮
oracle oracle执行计划 oracle行转列 nvl函数
https://www.modb.pro/db/26033
千杯不醉的蜡烛
7 月前
  • 学习
    • 课程中心
      推荐优质内容、热门课程
    • 学习路径
      预设学习计划、达成学习目标
    • 知识图谱
      综合了解技术体系知识点
    • 课程库
      快速筛选、搜索相关课程
    • 视频学习
      专业视频分享技术知识
    • 电子文档
      快速搜索阅览技术文档
  • 文档
  • 服务
    • 服务介绍
    • 专家团队
    • 智能巡检
    • 在线工具
    • 智能助手
    • 服务平台
  • 暂无图片
    • 数据库百科
    • 核心案例
    • 行业报告
    • 月度解读
    • 大事记
    • 产业图谱
  • 我的订单
  • 登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 资讯
    • 数说
    • 活动
    • 大会
    • 课程
    • 文档
    • 排行
    • 问答
    • 我的订单
    暂无图片
    • 首页
    • 专家团队
    • 智能助手
    • 在线工具
      • SQLRUN
        在线数据库即时SQL运行平台
      • 数据库在线实训平台
        实操环境、开箱即用、一键连接
      • AWR分析
        上传AWR报告,查看分析结果
      • SQL格式化
        快速格式化绝大多数SQL语句
      • SQL审核
        审核编写规范,提升执行效率
      • PLSQL解密
        解密超4000字符的PL/SQL语句
      • OraC函数
        查询Oracle C 函数的详细描述
      • 智能助手小墨
        关于数据库相关的问题,您都可以问我
    • 精选案例
    • 新闻资讯
    • 云市场
    登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 专家团队
    • 智能助手
    • 精选案例
    • 新闻资讯
    • 云市场
    暂无图片
    5
    暂无图片
    暂无图片
    微信扫码
    复制链接
    新浪微博
    分享数说
    暂无图片
    采集到收藏夹
    分享到数说
    首页 / Oracle行转列语法总结

    Oracle行转列语法总结

    原创 只是甲 2020-06-09
    3696

    Table of Contents

      • 一.decode语法
      • 二.CASE语法
      • 三.PIVOT语法
      • **小结:**
      • 四.wm_contact语法
      • 五.listagg语法
      • 六.xmlagg语法
      • **小结:**

    备注:测试以Oracle 11g下的scoot schema为例

    需求:求emp表各个岗位的工资之和,如无,用0代替

    一.decode语法

    SELECT deptno, nvl(SUM(decode(job, 'MANAGER', sal)), 0) s_MANAGER, nvl(SUM(decode(job, 'ANALYST', sal)), 0) s_ANALYST, nvl(SUM(decode(job, 'CLERK', sal)), 0) s_CLERK, nvl(SUM(decode(job, 'PRESIDENT', sal)), 0) s_PRESIDENT, nvl(SUM(decode(job, 'SALESMAN', sal)), 0) s_SALESMAN FROM emp GROUP BY deptno;

    二.CASE语法

    SELECT deptno, nvl(sum(case when job = 'MANAGER' then sal else 0 end),0) s_MANAGER, nvl(sum(case when job = 'ANALYST' then sal else 0 end),0) s_ANALYST, nvl(sum(case when job = 'CLERK' then sal else 0 end),0) s_CLERK, nvl(sum(case when job = 'PRESIDENT' then sal else 0 end),0) s_PRESIDENT, nvl(sum(case when job = 'SALESMAN' then sal else 0 end),0) s_SALESMAN FROM emp GROUP BY deptno;

    三.PIVOT语法

    WITH p AS (SELECT deptno, job, sal FROM emp) SELECT * FROM p pivot(SUM(sal) FOR job IN('MANAGER' AS s_MANAGER, 'ANALYST' AS s_ANALYST, 'CLERK' AS s_CLERK, 'PRESIDENT' AS s_PRESIDENT, 'SALESMAN' AS s_SALESMAN)); 不过这个地方null值没有替换成0,要通过nvl再转换一下

    WITH p AS (SELECT deptno, job, sal FROM emp), tmp AS (SELECT * FROM p pivot(SUM(sal) FOR job IN('MANAGER' AS s_MANAGER, 'ANALYST' AS s_ANALYST, 'CLERK' AS s_CLERK, 'PRESIDENT' AS s_PRESIDENT, 'SALESMAN' AS s_SALESMAN))) SELECT deptno, nvl(s_MANAGER, 0) s_MANAGER, nvl(s_ANALYST, 0) s_ANALYST, nvl(s_CLERK, 0) s_CLERK, nvl(s_PRESIDENT, 0) s_PRESIDENT, nvl(s_SALESMAN, 0) s_SALESMAN FROM tmp

    decode 语法简单,Oracle独有
    case sql标准语法
    pivot 语法最为简单,Oracle、sqlserver、postgresql均可以使用

    下面再来讲讲wm_concat、listagg、xmlagg
    需求:部门编号为20的所有的员工信息,以行的形式显示

    四.wm_contact语法

    SELECT T.DEPTNO, wm_concat(t.ename) names FROM EMP T WHERE T.DEPTNO = '20' GROUP BY T.DEPTNO;

    五.listagg语法

    SELECT T.DEPTNO, listagg(T.ENAME, ',') WITHIN GROUP(ORDER BY T .ENAME) names FROM EMP T WHERE T.DEPTNO = '20' GROUP BY T.DEPTNO;

    六.xmlagg语法

    SELECT T.DEPTNO, xmlagg(XMLELEMENT(T, ',',T.ENAME) ORDER BY T .ENAME).EXTRACT ('//text()') names FROM EMP T WHERE T.DEPTNO = '20' GROUP BY T.DEPTNO;
     
    推荐文章
    狂野的电池  ·  C#如何控制方法的执行时间,超时则强制退出方法执行-CSDN博客
    11 月前
    想表白的领结  ·  Handler 接收Parcelable ArrayList时返回空指针_getparcelablearraylistextra 空指针-CSDN博客
    1 年前
    慷慨大方的钥匙扣  ·  神经网络轴承故障诊断_一维卷积神经网络详解-腾讯云开发者社区-腾讯云
    1 年前
    精明的手套  ·  在C#中执行cmd指令时,因空格导致执行出错的解决方法 - 知乎
    1 年前
    气宇轩昂的蜡烛  ·  window.event.srcelement deprecated-掘金
    1 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号