精华内容
下载资源
问答
  • Oracle行转列wm_concat()
    2021-10-08 16:03:25

    原数据

    select id,name from T_SJZX_DMJZX where ssdm='GBT_XZQH' and rownum <6;
    

    执行结果如下:

    IDNAME
    8862剑河县
    8863台江县
    8864黎平县
    8865榕江县
    8866临猗县

    行转列

    select wm_concat(name) from T_SJZX_DMJZX where ssdm='GBT_XZQH' and rownum <6;
    

    执行结果如下:

    WM_CONCAT(NAME)
    剑河县,台江县,黎平县,榕江县,临猗县
    更多相关内容
  • oracle行转列

    2019-03-27 05:26:30
    NULL 博文链接:https://13966692733-163-com.iteye.com/blog/1192434
  • NULL 博文链接:https://vernonchen163.iteye.com/blog/1902976
  • oracle 行转列

    2019-03-29 01:14:57
    NULL 博文链接:https://lipeixiaoyu.iteye.com/blog/1281625
  • Oracle 行转列

    千次阅读 2021-09-08 18:18:00
    Oracle行转列 第一种方式 建多张表 #1.创建住院诊断表,按照日期分组,按照日期和患者id降序,生成RN字段。 CREATE TABLE PALAN.TZ_ZY_DIAG AS SELECT PATIENT_TYPE, DATE1, DIAG_NAME, PID , ROW_NUMBER() OVER ...

    Oracle 行转列


    第一种方式 建多张表

    #1.创建住院诊断表,按照日期分组,按照日期和患者id降序,生成RN字段。
    #注意:"DATE1"可以去掉,因为前面已经按照"DATE1"分区了,下面的几种方式也是一样。
    CREATE TABLE PALAN.TZ_ZY_DIAG
    AS
    SELECT PATIENT_TYPE, DATE1, DIAG_NAME, PID
    	, ROW_NUMBER() OVER (PARTITION BY DATE1 ORDER BY TO_NUMBER(PID) DESC) AS RN
    FROM PALAN.IN_DIAG_TOP50;
    

    对应1

    #2.创建1~50的RN表。
    CREATE TABLE PALAN.NUM_LIST
    AS
    SELECT RN
    FROM PALAN.TZ_ZY_DIAG
    WHERE DATE1 = '2018-11'
    ORDER BY RN;
    

    对应2

    #3.去重日期后,72个月,关联RN 1~50的"NUM_LIST"表,按照日期和RN升序(不写默认升序)3600条记录
    WITH TMP_LIST AS 
    (SELECT T1.DATE1,T2.RN FROM 
    (SELECT DISTINCT DATE1 FROM  PALAN.TZ_ZY_DIAG) T1 JOIN  PALAN.NUM_LIST T2 ON 1=1 ORDER BY 1,2),
    
    #住院诊断表关联"TMP_LIST"表,条件:日期等于日期,RN等于RN,按照日期分组,按照日期升序。
    TMP_LIST2 AS 
    (SELECT 
    TL.DATE1,
    MAX(DECODE(TL.RN,'1',TZD.DIAG_NAME||'---'||TZD.PID)) AS "1",
    MAX(DECODE(TL.RN,'2',TZD.DIAG_NAME||'---'||TZD.PID)) AS "2",
    MAX(DECODE(TL.RN,'3',TZD.DIAG_NAME||'---'||TZD.PID)) AS "3",
    -- 代码太长,此处省略(4-49)
    MAX(DECODE(TL.RN,'50',TZD.DIAG_NAME||'---'||TZD.PID)) AS "50"
    
    FROM PALAN.TZ_ZY_DIAG TZD 
    JOIN  
    TMP_LIST TL 
    ON TZD.DATE1 = TL.DATE1 
    AND TZD.RN = TL.RN
    GROUP BY TL.DATE1 ORDER BY TL.DATE1 )
    
    SELECT * FROM TMP_LIST2;
    
    

    对应3

    第二种方式 PIVOT

    #第二种方式 PIVOT
    WITH TEMP AS(
    SELECT DATE1,DIAG_NAME||'---'||PID AS DIAG_NAME_PID,ROW_NUMBER() OVER(PARTITION BY DATE1 
    ORDER BY TO_NUMBER(PID) DESC) AS RN FROM PALAN.IN_DIAG_TOP50
    )
    SELECT * FROM (SELECT DATE1,DIAG_NAME_PID,RN FROM TEMP)PIVOT(MAX(DIAG_NAME_PID) FOR RN IN (
    
    '1' AS "1",
    '2' AS "2",
    '3' AS "3",
    -- 代码太长,此处省略(4-49)
    '50' AS "50"
    ));
    

    PIVOT图片

    第三种方式 WM_CONCAT

    #第三种方式 WM_CONCAT
    SELECT DATE1,MAX(RN) FROM 
    (SELECT DATE1,WM_CONCAT(DIAG_NAME||'---'||PID) OVER(PARTITION BY DATE1 ORDER BY TO_NUMBER(PID) DESC) AS RN 
    FROM PALAN.IN_DIAG_TOP50)
    GROUP BY DATE1;
    

    WM_CONCAT图片

    第四种方式 LISTAGG

    #第四种方式 LISTAGG
    SELECT DATES, LISTAGG(DIAG_NAME||'---'||PID, '	')  WITHIN GROUP (ORDER BY TO_NUMBER(PID) DESC) 
     FROM SYSTEM.IN_DIAG_TOP50  GROUP BY DATES
    

    LISTAGG图片

    展开全文
  • oracle行转列_列转行

    2012-11-09 15:11:27
    oracle行转列_列转行,实例加解析,自己测试没问题。免费分享了~
  • Oracle行转列之pivot

    2013-03-15 20:45:13
    oracle数据库最详细的行转列资料,是官方文档的详细介绍版,中文的
  • oracle行转列、列转行总结

    千次阅读 2022-04-13 15:03:48
    1.行转列 (1)decode实现 SELECT t_year, MAX(DECODE(t_month,'1月',t_value)) AS 一月, MAX(DECODE(t_month,'2月',t_value)) AS 二月, MAX(DECODE(t_month,'3月',t_value)) AS 三月, MAX(DECODE(t_month,'4月'...

    1.行转列

    (1)decode实现

    SELECT t_year,
    MAX(DECODE(t_month,'1月',t_value)) AS 一月,
    MAX(DECODE(t_month,'2月',t_value)) AS 二月,
    MAX(DECODE(t_month,'3月',t_value)) AS 三月,
    MAX(DECODE(t_month,'4月',t_value)) AS 四月
    FROM a_testtable WHERE t_month IN('1月','2月','3月','4月')
    GROUP BY t_year;

     (2)case when实现

    SELECT t_year,
    MAX(CASE t_month WHEN '1月' THEN t_value END) AS 一月,
    MAX(CASE t_month WHEN '2月' THEN t_value END) AS 二月,
    MAX(CASE t_month WHEN '3月' THEN t_value END) AS 三月,
    MAX(CASE t_month WHEN '4月' THEN t_value END) AS 四月
    FROM a_testtable WHERE t_month IN('1月','2月','3月','4月')
    GROUP BY t_year;

     (3)pivot函数

    SELECT * FROM a_testtable
    PIVOT(SUM(t_value) FOR t_month IN('1月' AS 一月,'2月' AS 二月,'3月' AS 三月,'4月' AS 四月));

    SELECT * FROM 
    (SELECT t_year AS ye,t_month AS mon,t_value AS val FROM a_testtable) a 
    PIVOT(SUM(val) FOR mon IN('1月' AS 一月,'2月' AS 二月,'3月' AS 三月,'4月' AS 四月));

     2列转行

    准备表及数据

     (1)decode实现

    SELECT t_year,
    DECODE(lvl,1,'1月',2,'2月',3,'3月',4,'4月') AS t_month,
    DECODE(lvl,1,one_m,2,two_m,3,tree_m,4,four_m) AS t_qty
    FROM b_testtable,(SELECT LEVEL lvl FROM dual CONNECT BY LEVEL<=4)
    ORDER BY t_year,t_month;

    (2)case when实现

     SELECT t_year,
    CASE lvl WHEN 1 THEN '1月' 
        WHEN 2 THEN '2月' 
        WHEN 3 THEN '3月' 
        WHEN 4 THEN '4月' 
    END AS t_month,
    CASE lvl WHEN 1 THEN one_m 
        WHEN 2 THEN two_m 
        WHEN 3 THEN tree_m 
        WHEN 4 THEN four_m 
    END AS t_qty
    FROM b_testtable,(SELECT LEVEL lvl FROM dual CONNECT BY LEVEL<=4)
    ORDER BY t_year,t_month;

    (3)unpivot函数实现

    SELECT * FROM b_testtable
    UNPIVOT(t_qty FOR t_month IN(one_m AS '1月',two_m AS '2月',tree_m AS '3月',four_m AS '4月'))
    ORDER BY t_year,t_month;

     

     

    展开全文
  • ORACLE行转列

    2013-04-05 16:38:44
    许多情况下,由于程序中需要将转为展示,如果使用ORACLE那么这个资源适合你。
  • Oracle行转列

    千次阅读 2019-06-12 11:22:16
    oracle行转列(感觉不该叫这个名字)小记录 一、工具 win10、oracle 11g(之前版本不支持pivot函数)、pl/sql Developer 建表语句 create table r2c( name varchar2(30), subject varchar2(20), score number ); ...

    oracle行转列(感觉不该叫这个名字)小记录
    一、工具
    win10、oracle 11g(之前版本不支持pivot函数)、pl/sql Developer

    建表语句

    create table r2c(
    name varchar2(30),
    subject  varchar2(20),
    score     number
    );
    

    插入数据语句

    insert into r2c values('kevin','语文',80);
    insert into r2c values('kevin','数学',81);
    insert into r2c values('kevin','英语',82);
    insert into r2c values('tom','语文',80);
    insert into r2c values('tom','数学',81);
    insert into r2c values('tom','英语',82);
    insert into r2c values('snake','语文',90);
    insert into r2c values('snake','数学',91);
    insert into r2c values('snake','英语',92);
    commit;
    

    查询结果显示
    在这里插入图片描述
    1、普通的行转列(max与decode结合):

    --就是按照要输出的样式进行重写(原表进行“转置”)
    --将原来的表重写为列名为 name  语文  数学  英语  这样式的
    --decode用case when then代替也可以
    select name,
           max(decode(subject, '语文', score, null)) as "语文", --双引号或者直接中文,单引号会报错
           max(decode(subject, '数学', score, null)) as "数学", --用max这个聚合函数是为了配合group by
           max(decode(subject, '英语', score, null)) as "英语"
      from r2c
     group by name
    

    2、调用pivot函数

    --pivot语法:pivot(任一聚合函数 for 需转列的值所在列名 in (需转为列名的值));
    select *
      from r2c
    pivot(max(score)                 --转换行里需要显示的数据,一般是数字的那列
       for subject in('语文' as "语文", '数学' as "数学", '英语' as "英语"));
       --重新定义列名
    

    两个运行的结果截图都是
    在这里插入图片描述

    pivot函数差不多就是就干了一个把第一列数据进行分组(就是去重),然后将原表中需要转换的列进行一下转置,再切分转置后的表,这样的工作。
    -在这里插入图片描述

    展开全文
  • 行转列函数,对于学习sql查询的朋友们,可能会遇到这样的要求,此文档中做了详细记载,希望可以帮到你!
  • 2019独角兽企业重金招聘... ---------------------------------------------------------------行转列的存储过程CREATE OR REPLACE PROCEDURE P_TEST ISV_SQL VARCHAR2(2000);CURSOR CURSOR_1 IS SELECT DISTINCT...
  • Oracle行转列函数

    千次阅读 2020-12-22 13:52:39
    Oracle行转列函数1 需求在实际开发中,行转列函数可以把列值以逗号分隔起来,并显示成一行。现要求利用一条sql语句获得表emp中所有员工姓名,且要求在前台页面中作为一个字符串出现,在这个字符串中员工之间的姓名用...
  • oracle 行转列SQL

    2011-12-11 00:47:44
    关于oracle数据库如何行转列SQL语句。
  • Oracle行转列的3种方法

    2021-05-01 10:53:21
    测试表为A3 , 有5个字段:ID1, ID2, ID3, ID4, ID5测试数据如下:ID1ID2ID3ID4ID5123451122334455111222333444555结果如下:ID111ID222ID333方法1:使用系统表SELECT DECODE(COLUMN_NAME, COLUMN_NAME, COLUMN_NAME)...
  • 工作中,我们经常会碰到行转列的情况这里我介绍几种简单的方法--行转列1.oracle的pivot函数原表使用pivot函数:with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual union allselect '...
  • Oracle行转列、列转行的几种方法

    万次阅读 2019-11-08 15:58:46
    Oracle 11g之后,支持使用PIVOT实现行转列 函数说明: PIVOT(任意聚合函数 FOR 列名 IN(类型)) 其中,【聚合函数】聚合的字段,是需要转化为列值的字段;【列名】是需要转化为列标识的字段,【类型】即是...
  • 关于oracle行转列函数

    千次阅读 2021-01-27 11:47:59
    关于oracle行转列函数LISTAGG()XMLAGG() LISTAGG() 例如: 查出每个职位的所有人名单: 但是如果遇到转为一行后的字段过于太长太长,会报错,如下: 这样只有使用另一种方法查出来转为行的结果类型转为clob ...
  • 1、行转列 select * from (select A.datekey, A.Dateyear,A.Datemonth from F_JZB_WLAQXMSL A) pivot (sum(A.XMSL) for A.XMJD in ('1' 规划, '2'立项, '3'建设, '4'验收,'5'结项,'6'运维)); 2、列转行 SELECT * ...
  • 运行结果: 二、行转列 将某个字段的多行结果,拼接成一个字段,获取拼接的字符串【默认逗号隔开】 select wm_concat(bkg_num) from CD_XLS_UPLOAD_DETAIL where cd_xls_upload_uuid='392' ; 运行结果: 6098621760...
  • pivot:行转列unpivot:列转行 pivot:行转列 测试语句: WITH t_test AS( SELECT '1' ID, '张三' NAME, '70' score, 'CHINESE' subject FROM dual UNION ALL SELECT '1' ID, '张三' NAME, '90' score, '...
  • Oracle行转列详解

    万次阅读 2019-07-05 17:16:00
    一、建表与插入数据 1.1、建表 create table kecheng (  id NUMBER,  name VARCHAR2(20),  course VARCHAR2(20), ...自: https://blog.csdn.net/w892824196/article/details/82222193
  • 行转列函数--pivot欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居...
  • 多行字符串 这个比较简单,用||或concat函数可以实现 ? 1 ... select concat(id,username) str from ... 字符串 实际上就是拆分字符串的问题,可以使用 substr、instr、regexp_substr函数方式 ...
  • oracle行转列——用逗号分开

    千次阅读 2020-08-06 21:38:38
    机构 上级机构 0001 000001 0002 000001 0003 000001 0004 000002 0005 000002 上面的表转换成下面的表 上级机构 机构 000001 0001,0003,0002 000002 0004,0005 ...select "上级机构...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 90,736
精华内容 36,294
关键字:

oracle行转列