一、简易运用

——>没转之前一个主号绑定多个副号的多行输出(像移动的欢乐在线)

SELECT   f.town_name 镇区,
          f.school_name 学校,
          f.class_name 班级,
          f.student_name 学生,
          b.phone 主号码,
          b.bindphone 绑定的副号码
   FROM   dg_FPS_BINDPHONE b, dg_family f
WHERE       b.family_id = f.family_id
          AND b.phone = f.phone
          AND f.school_id = 61758
          AND NVL (f.is_test, 0) <> 1;

——>转之后的一行多列输出
(使用分析函数的情况)
   SELECT   town_name,
            school_name,
            class_name,
            student_name,
            phone,
            MAX (DECODE (rn, 1, bindphone)) "亲情号码1",
            MAX (DECODE (rn, 2, bindphone)) "亲情号码2",
            MAX (DECODE (rn, 3, bindphone)) "亲情号码3",
            MAX (DECODE (rn, 4, bindphone)) "亲情号码4",
            MAX (DECODE (rn, 5, bindphone)) "亲情号码5",
            MAX (DECODE (rn, 6, bindphone)) "亲情号码6"
     FROM   (SELECT   f.town_name,
                      f.school_name,
                      f.class_name,
                      f.student_name,
                      b.phone,
                      b.bindphone,
                      COUNT( * )
                         OVER ( PARTITION BY f.town_name,f.school_name,f.class_name,f.student_name,b.phone
                            ORDER BY ROWNUM
                            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
                         )
                         rn
               FROM   dg_fps_bindphone b, dg_family f
              WHERE       b.family_id = f.family_id  AND  b.phone = f.phone  AND  f.school_id = 61758  AND  NVL (f.is_test, 0) <> 1)
GROUP BY   town_name,school_name,class_name,student_name,phone;

(不使用分析函数的情况)
select t.user_id,t.name,
max(decode(t.yw_name,'流量包','是','否')) 是否开通流量包,
max(decode(t.yw_name,'流量包',dt,NULL)) 是否开通流量包,
max(case when t.yw_name='加餐包' and t.attr_value like '%50元%' then '50元加餐' end) 是否50元加餐,
max(case when t.yw_name='加餐包' and t.attr_value like '%50元%' then dt end) 五十元加餐时间,
max(case when t.yw_name='加餐包' and t.attr_value like '%100元%' then '100元加餐' end) 是否100元加餐,
max(case when t.yw_name='加餐包' and t.attr_value like '%100元%' then dt end) "100元加餐时间",
max(case when t.yw_name='加餐包' and t.attr_value like '%200元%' then '200元加餐' end) 是否200元加餐,
max(case when t.yw_name='加餐包' and t.attr_value like '%200元%' then dt end) "200元加餐时间",
max(case when t.yw_name='加餐包' and t.attr_value is null then '未知加餐包' end) 是否未知加餐包,
max(case when t.yw_name='加餐包' and t.attr_value is null then dt end) "未知加餐包时间"
from temp_liut l, liut_temp5 t
where l.acc_nbr=t.user_id
group by t.user_id,t.name;

二、用 wmsys.wm_concat 系统内部函数
     通过运用wmsys系统用户下的wm_concat函数也能达到行列转换效果(一列显示,数据之间以逗号分隔)

--  一个老师会带多个班级
   SELECT   town.name 镇区,
            s.school_name,
            t.username 教师,
            t.userid 账号,
            t.mphone 联系方式,
            r.name 角色,
            wmsys.wm_concat (c.class_name) 班级
     FROM   area a,
            town,
            qx_sch_role r,xj_school s LEFT JOIN xj_teacher t ON s.id = t.school_id
               LEFT JOIN tea_class_subject su ON t.id = su.teacher_id
            LEFT JOIN xj_class c ON su.class_id = c.id
    WHERE       a.id = town.area_id
            AND town.id = s.town_id
            AND r.id = t.role_id
            AND a.id = 1
            AND NVL (town.is_test, 0) <> 1
GROUP BY   town.name,s.school_name,t.username,t.userid,t.mphone,r.name

三、11.2新函数listagg
语法:listagg(分割列,分隔符) within group(order by 排序列)
select listagg(o.rybs, ';') within group(order by o.rybs)
   from gk_xszrr o
  where rownum <= 100;

转载于:https://www.cnblogs.com/bbliutao/p/7575707.html

Oracle 行转列相关推荐

  1. oracle 行转列后列名,Oracle 多行转多列,列值转为列名

    前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要导出问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了 ...

  2. oracle行转列处理方法,oracle行转列解决办法

    oracle行转列 Cust prod 1       A 1       B 1       C 2       A 2       B Return Cust     Prod1     Prod ...

  3. oracle行转列和sqlserver行转列语法分析比对

    前言 最近遇到一些老项目,在实施过程中需要切换数据库,遇到了好几处行转列的语法,在网上找了一些资料后,都不能很好的解释分析,下面我将个人在工作中遇到的一些问题以及解决方案详细的描述记录下来,如果有遇到 ...

  4. oracle不定列,oracle行转列

    oracle行转列(动态行转不定列) 思路:创建一个存储过程,用存储过程来动态的创建更新查询视图 1.视图定义如下 create or replace view emp_view as select ...

  5. oracle 行转列字符拼接,oracle 行转列,用特殊符号拼接

    第一种 函数 wm_content('待转列名称') 11g 往后,不推荐使用 实例 多表关联时可以使用 (SELECT wm_concat(nvl(B1.OPERA_CODE,'a')) AS OP ...

  6. ORACLE行转列和列转行

    文章目录 ORACLE行转列和列转行 定义 ORACLE-行转列-unpivot 数据准备 行转列使用 ORACLE-列转行-pivot 数据准备 列转行使用 ORACLE行转列和列转行 定义 行转列 ...

  7. oracle 行转列sql语句,行转列(sql行转列)

    sql语句行转列?怎么转啊 select MIN(id) as ID, name, sex, sum(case when num=2 then 2 end) as num2, sum(case whe ...

  8. Oracle 行转列 pivot函数基本用法

    2018年9月30日22点,眼看着就10月份了,回头看下,8月份就写了一篇博客,9月一篇都没写,想着还是得续一续. 刚好前几天,帮一个群友处理了一个关于Oracle中行转列,根据查询中有的项目,动态转 ...

  9. oracle+行换列,Oracle的数据表中行转列与列转行的操作实例讲解

    行转列一张表 查询结果为 --行转列 select years,(select amount from Tb_Amount as A where month=1 and A.years=Tb_Amou ...

  10. Oracle 行转列pivot 、列转行unpivot 的Sql语句总结

    多行转字符串 这个比较简单,用||或concat函数可以实现 [sql] view plaincopy print? select concat(id,username) str from app_u ...

最新文章

  1. 20以内分数化小数表_数与代数之小数
  2. linux centos 使用 alpine 编译的二进制文件 报错 /lib/ld-musl-x86_64.so.1: bad ELF interpreter 解决方法
  3. 迅为i-TOP4412出厂首次烧写
  4. C++实现堆排序(附完整源码)
  5. Flutter 34: 图解自定义 View 之 Canvas (一)
  6. linux ntfs硬盘自动挂,linux下查看所有硬盘分区+挂接NTFS磁盘/硬盘+自动挂接硬盘方法...
  7. 微软 Azure App Service 漏洞 NotLegit已存在4年,客户源代码被暴露
  8. Nuget:Newtonsoft.Json
  9. windows桌面待办事项_想拒绝拖延症?你还缺一款云同步提醒的的桌面便签软件!...
  10. 常见的贴片LED封装尺寸规格表
  11. 基于java软件工程专业教辅平台课程子系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  12. 基于机智云物联网平台的智能花盆2.0,实现了智能灌溉与自动补光
  13. 世界上第一部智能手机27岁了
  14. linux affinity,Linux CPU Affinity
  15. TCP四次挥手中的2MSL是什么?
  16. html基本标签斜体,请选择产生斜体字的HTML标签:
  17. PS一分钟打造手机渐变壁纸
  18. 第三章 培养工作兴趣
  19. Mac 打开safari浏览器直接卡死解决方法,解决Safari浏览器访问网页卡死重新再打开浏览器还是卡死实例演示
  20. python爬取豆瓣读书并进行图形化分析

热门文章

  1. Python 技术篇-使用PyQt5库获取电脑屏幕桌面的宽、高和分辨率
  2. Python 技术篇-获取requests里的二进制文本并保存为音频、图片文件,提取requests里的多媒体信息
  3. 【STM32】STM32f4学习之路--嘀嗒定时器
  4. hdu1999 不可摸数 好题.
  5. 在C语言中,double、long、unsigned、int、char类型数据所占字节数
  6. 聚类之K-means均值聚类
  7. char几个字节java_java中的char占几个字节实例分析
  8. Python高效画饼图
  9. 【解决方案】Selenium打开网站却显示空白
  10. C++:顺序表的基本操作(待完善)