精华内容
下载资源
问答
  • oracle 行转列SQL

    2011-12-11 00:47:44
    关于oracle数据库如何行转列SQL语句。
  • 多行字符串 这个比较简单,用||或concat函数可以实现 ? 1 ... select concat(id,username) str from ... 字符串 实际上就是拆分字符串的问题,可以使用 substr、instr、regexp_substr函数方式 ...

    多行转字符串

    这个比较简单,用||或concat函数可以实现

    ?

    1

    select concat(id,username) str from app_userselect id||username str from app_user

    字符串转多列

    实际上就是拆分字符串的问题,可以使用 substr、instr、regexp_substr函数方式

    字符串转多行

     

    使用union all函数等方式

    wm_concat函数

    首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用准备测试数据

     

     

    ?

    1

    create table test(id number,name varchar2(20));insert into test values(1,'a');insert into test values(1,'b');insert into test values(1,'c');insert into test values(2,'d');insert into test values(2,'e');

     

    效果1 : 行转列 ,默认逗号隔开

     

     

    ?

    1

    select wm_concat(name) name from test;

    /

     

    效果2: 把结果里的逗号替换成"|"

     

    ?

    1

    select replace(wm_concat(name),',','|') from test;

    /

     

    效果3: 按ID分组合并name

    ?

    1

    select id,wm_concat(name) name from test group by id;

    /
    sql语句等同于下面的sql语句

    ?

    1

    -------- 适用范围:8i,9i,10g及以后版本  ( MAX + DECODE )select id, max(decode(rn, 1, name, null)) || max(decode(rn, 2, ',' || name, null)) || max(decode(rn, 3, ',' || name, null)) str       from (select id,name,row_number() over(partition by id order by name) as rn from test) t group by id order by 1;      -------- 适用范围:8i,9i,10g及以后版本 ( ROW_NUMBER + LEAD )select id, str from (select id,row_number() over(partition by id order by name) as rn,name || lead(',' || name, 1) over(partition by id order by name) ||    lead(',' || name, 2) over(partition by id order by name) || lead(',' || name, 3) over(partition by id order by name) as str from test) where rn = 1 order by 1;  -------- 适用范围:10g及以后版本 ( MODEL )select id, substr(str, 2) str from test model return updated rows partition by(id) dimension by(row_number() over(partition by id order by name) as rn) measures (cast(name as varchar2(20)) as str) rules upsert iterate(3) until(presentv(str[iteration_number+2],1,0)=0) (str[0] = str[0] || ',' || str[iteration_number+1]) order by 1;              -------- 适用范围:8i,9i,10g及以后版本 ( MAX + DECODE )select t.id id,max(substr(sys_connect_by_path(t.name,','),2)) str from (select id, name, row_number() over(partition by id order by name) rn from test) t       start with rn = 1 connect by rn = prior rn + 1 and id = prior id group by t.id;</span>

    懒人扩展用法:

    案例: 我要写一个视图,类似"create or replace view as select 字段1,...字段50 from tablename" ,基表有50多个字段,要是靠手工写太麻烦了,有没有什么简便的方法? 当然有了,看我如果应用wm_concat来让这个需求变简单,假设我的APP_USER表中有(id,username,password,age)4个字段。查询结果如下

     

     

    ?

    1

    /** 这里的表名默认区分大小写 */ select 'create or replace view as select '|| wm_concat(column_name) || ' from APP_USER' sqlStr from user_tab_columns where table_name='APP_USER';

    /

     

    利用系统表方式查询

     

    ?

    1

    select * from user_tab_columns

    /
     

     

     

    Oracle 11g 行列互换 pivot 和 unpivot 说明

     

    在Oracle 11g中,Oracle 又增加了2个查询:pivot(行转列) 和unpivot(列转行)

    参考:http://blog.csdn.net/tianlesoftware/article/details/7060306、http://www.oracle.com/technetwork/cn/articles/11g-pivot-101924-zhs.html

     

    google 一下,网上有一篇比较详细的文档:http://www.oracle-developer.net/display.php?id=506

    pivot 列转行

    测试数据 (id,类型名称,销售数量),案例:根据水果的类型查询出一条数据显示出每种类型的销售数量。

     

    ?

    1

    create table demo(id int,name varchar(20),nums int);  ---- 创建表insert into demo values(1, '苹果', 1000);insert into demo values(2, '苹果', 2000);insert into demo values(3, '苹果', 4000);insert into demo values(4, '橘子', 5000);insert into demo values(5, '橘子', 3000);insert into demo values(6, '葡萄', 3500);insert into demo values(7, '芒果', 4200);insert into demo values(8, '芒果', 5500);

    /

     

    分组查询 (当然这是不符合查询一条数据的要求的)

    ?

    1

    select name, sum(nums) nums from demo group by name

     

    /

    行转列查询

     

    ?

    1

    select * from (select name, nums from demo) pivot (sum(nums) for name in ('苹果' 苹果, '橘子', '葡萄', '芒果'));


    /

     

    注意: pivot(聚合函数 for 列名 in(类型)) ,其中 in(‘’) 中可以指定别名,in中还可以指定子查询,比如 select distinct code from customers

    当然也可以不使用pivot函数,等同于下列语句,只是代码比较长,容易理解

     

    ?

    1

    select * from select sum(nums) 苹果 from demo where name='苹果'),(select sum(nums) 橘子 from demo where name='橘子'),       (select sum(nums) 葡萄 from demo where name='葡萄'),(select sum(nums) 芒果 from demo where name='芒果');

    unpivot 行转列

    顾名思义就是将多列转换成1列中去
    案例:现在有一个水果表,记录了4个季度的销售数量,现在要将每种水果的每个季度的销售情况用多行数据展示。

     

    创建表和数据

     

    ?

    1

    create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);insert into Fruit values(1,'苹果',1000,2000,3300,5000);insert into Fruit values(2,'橘子',3000,3000,3200,1500);insert into Fruit values(3,'香蕉',2500,3500,2200,2500);insert into Fruit values(4,'葡萄',1500,2500,1200,3500);select * from Fruit

    /

     

    列转行查询

     

    ?

    1

    select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )

    注意: unpivot没有聚合函数,xiaoshou、jidu字段也是临时的变量
    /

     

    同样不使用unpivot也可以实现同样的效果,只是sql语句会很长,而且执行速度效率也没有前者高

     

    ?

    1

    select id, name ,'Q1' jidu, (select q1 from fruit where id=f.id) xiaoshou from Fruit funionselect id, name ,'Q2' jidu, (select q2 from fruit where id=f.id) xiaoshou from Fruit funionselect id, name ,'Q3' jidu, (select q3 from fruit where id=f.id) xiaoshou from Fruit funionselect id, name ,'Q4' jidu, (select q4 from fruit where id=f.id) xiaoshou from Fruit f

     

    XML类型

    上述pivot列转行示例中,你已经知道了需要查询的类型有哪些,用in()的方式包含,假设如果您不知道都有哪些值,您怎么构建查询呢?

    pivot 操作中的另一个子句 XML 可用于解决此问题。该子句允许您以 XML 格式创建执行了 pivot 操作的输出,在此输出中,您可以指定一个特殊的子句 ANY 而非文字值

    示例如下:

     

    ?

    1

    select * from (   select name, nums as "Purchase Frequency"   from demo t)                              pivot xml (   sum(nums) for name in (any))

    /
    如您所见,列 NAME_XML 是 XMLTYPE,其中根元素是 <PivotSet>。每个值以名称-值元素对的形式表示。您可以使用任何 XML 分析器中的输出生成更有用的输出。

     

     

     

    /

     

    结论

     

    Pivot 为 SQL 语言增添了一个非常重要且实用的功能。您可以使用 pivot 函数针对任何关系表创建一个交叉表报表,而不必编写包含大量 decode 函数的令人费解的、不直观的代码。同样,您可以使用 unpivot 操作转换任何交叉表报表,以常规关系表的形式对其进行存储。Pivot 可以生成常规文本或 XML 格式的输出。如果是 XML 格式的输出,您不必指定 pivot 操作需要搜索的值域。

     

    转自:https://www.cnblogs.com/yewg/p/5510594.html

    展开全文
  • Oracle行转列转行的Sql语句总结

    万次阅读 2015-06-12 17:11:09
    行转列 转行 [一]、行转列   1.1、初始测试数据   表结构:TEST_TB_GRADE   Sql代码  create table TEST_TB_GRADE  (   ID NUMBER(10) not null,   USER_NAME VARCHAR2(20 CHAR),   ...

    目录结构如下:
    行转列
    列转行
    [一]、行转列
     
    1.1、初始测试数据
     
    表结构:TEST_TB_GRADE
     
    Sql代码 
    create table TEST_TB_GRADE 

      ID        NUMBER(10) not null, 
      USER_NAME VARCHAR2(20 CHAR), 
      COURSE    VARCHAR2(20 CHAR), 
      SCORE     FLOAT 

     初始数据如下图:

                           
     
    1.2、 如果需要实现如下的查询效果图:

                        
     
    这就是最常见的行转列,主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的,具体的sql如下:
    Sql代码 
    select t.user_name, 
      sum(decode(t.course, '语文', score,null)) as CHINESE, 
      sum(decode(t.course, '数学', score,null)) as MATH, 
      sum(decode(t.course, '英语', score,null)) as ENGLISH 
    from test_tb_grade t 
    group by t.user_name 
    order by t.user_name 
     
     
    1.3、延伸
     
    如果要实现对各门功课的不同分数段进行统计,效果图如下:

                    
     
    具体的实现sql如下:
    Sql代码 
    select t2.SCORE_GP, 
      sum(decode(t2.course, '语文', COUNTNUM,null)) as CHINESE, 
      sum(decode(t2.course, '数学', COUNTNUM,null)) as MATH, 
      sum(decode(t2.course, '英语', COUNTNUM,null)) as ENGLISH 
    from ( 
      select t.course, 
             case when t.score  <60 then '00-60' 
                  when t.score >=60 and t.score <80  then '60-80' 
                  when t.score >=80 then '80-100' end as SCORE_GP, 
             count(t.score) as COUNTNUM 
      FROM test_tb_grade t 
      group by t.course,  
            case when t.score  <60  then '00-60' 
                  when t.score >=60 and t.score <80  then '60-80' 
                  when t.score >=80 then '80-100' end 
      order by t.course ) t2 
    group by t2.SCORE_GP 
    order by t2.SCORE_GP 
     
    [二]、列转行
     
    1.1、初始测试数据
            表结构:TEST_TB_GRADE2
    Sql代码 
    create table TEST_TB_GRADE2 

      ID         NUMBER(10) not null, 
      USER_NAME  VARCHAR2(20 CHAR), 
      CN_SCORE   FLOAT, 
      MATH_SCORE FLOAT, 
      EN_SCORE   FLOAT 

     
            初始数据如下图:

           
     
    1.2、 如果需要实现如下的查询效果图:

                          
     
    这就是最常见的列转行,主要原理是利用SQL里面的union,具体的sql语句如下:
    Sql代码 
    select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2  
    union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2  
    union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2  
    order by user_name,COURSE  
     
     也可以利用【 insert all into ... select 】来实现,首先需要先建一个表TEST_TB_GRADE3:
    Sql代码 
    create table TEST_TB_GRADE3   
        (  
          USER_NAME VARCHAR2(20 CHAR),   
          COURSE    VARCHAR2(20 CHAR),   
          SCORE     FLOAT   
        )   
     再执行下面的sql:
     
    Sql代码 
    insert all 
    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '语文', CN_SCORE) 
    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '数学', MATH_SCORE) 
    into test_tb_grade3(USER_NAME,COURSE,SCORE) values(user_name, '英语', EN_SCORE) 
    select user_name, CN_SCORE, MATH_SCORE, EN_SCORE from test_tb_grade2; 
    commit; 

     别忘记commit操作,然后再查询TEST_TB_GRADE3,发现表中的数据就是列转成行了。



    转载自:http://www.2cto.com/database/201108/100792.html

    展开全文
  • Oracle行转列之pivot

    2013-03-15 20:45:13
    oracle数据库最详细的行转列资料,是官方文档的详细介绍版,中文的
  • oracle中有一张读者表(TableReader),里面有一保存读者类型(ColReaderTypeIds),存的值是类似(1,2,3)这种,分别对应读者类型表(TableReaderType)中的类型(ReaderTypeId),1,类型1;2,类型2;3,类型3。是三...
  • Oracle行转列转行的几种方法

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

    一、行转列

    我们的表结构和数据如下:

    1、使用PIVOT函数

            Oracle  11g之后,支持使用PIVOT实现行转列

    函数说明:

            PIVOT(任意聚合函数  FOR  列名  IN(类型))

            其中,【聚合函数】聚合的字段,是需要转化为列值的字段;【列名】是需要转化为列标识的字段,【类型】即是需要的结果展示,【类型】中可以指定别名; IN中还可以指定子查询。

           针对我们如上例子,查询SQL应该为:

    SQL:

    SELECT * FROM (
      SELECT 
           A16.INTEREST_RATE_CD
           ,A16.DATA_DT
           ,A16.TERM
           ,A16.INTEREST_RATE
      FROM FACT_FTP260_BSC_A16 A16
    )
    PIVOT(
            SUM(INTEREST_RATE)
            FOR TERM
            IN ('1D' AS D1   ,'7D' AS D7   ,'14D' AS D14
               ,'1M' AS M1   ,'2M' AS M2   ,'6M' AS M6
               ,'9M' AS M9   ,'1Y' AS Y1    ,'2Y' AS Y2
               ,'3Y' AS Y3   ,'5Y' AS Y5   ,'7Y' AS Y7
               ,'10Y' AS Y10 ,'15Y' AS Y15 )
        )

     

    注意:

            1、如果直接使用【*】查询,会得不到查询结果:

    查询结果出错:

     

    2、即便是使用了嵌套查询,也必须写明查询字段

    查询结果出错:

     

    3、不可以直接使用WHERE语句

     

    4、PIVOT中的字段,是简单字段类型,不能加表别名

     

    5、PIVOT函数中用到的字段,字段数据必须被查出

     

    2、使用 MAX 和 DECODE 函数

    SQL图:

    SQL:

    SELECT
        A16.INTEREST_RATE_CD
        ,MAX(DECODE(A16.TERM, '1D', A16.INTEREST_RATE, 0 )) AS D1
        ,MAX(DECODE(A16.TERM, '7D', A16.INTEREST_RATE, 0 )) AS D7
        ,MAX(DECODE(A16.TERM, '14D', A16.INTEREST_RATE, 0 )) AS D14
        ,MAX(DECODE(A16.TERM, '1M', A16.INTEREST_RATE, 0 )) AS M1
        ,MAX(DECODE(A16.TERM, '2M', A16.INTEREST_RATE, 0 )) AS M2
        ,MAX(DECODE(A16.TERM, '3M', A16.INTEREST_RATE, 0 )) AS M3
        ,MAX(DECODE(A16.TERM, '6M', A16.INTEREST_RATE, 0 )) AS M6
        ,MAX(DECODE(A16.TERM, '9M', A16.INTEREST_RATE, 0 )) AS M9
        ,MAX(DECODE(A16.TERM, '1Y', A16.INTEREST_RATE, 0 )) AS Y1
        ,MAX(DECODE(A16.TERM, '2Y', A16.INTEREST_RATE, 0 )) AS Y2
        ,MAX(DECODE(A16.TERM, '3Y', A16.INTEREST_RATE, 0 )) AS Y3
        ,MAX(DECODE(A16.TERM, '5Y', A16.INTEREST_RATE, 0 )) AS Y5
        ,MAX(DECODE(A16.TERM, '7Y', A16.INTEREST_RATE, 0 )) AS Y7
        ,MAX(DECODE(A16.TERM, '10Y', A16.INTEREST_RATE, 0 )) AS Y10
        ,MAX(DECODE(A16.TERM, '15Y', A16.INTEREST_RATE, 0 )) AS Y15
    FROM FACT_FTP260_BSC_A16 A16
    GROUP BY 
         A16.INTEREST_RATE_CD

    结果展示:

     

     

    3、使用 CASE  WHEN  和  GROUP  BY

          这种方式是最常用的,比价容易理解。

    SQL图:

    SQL:

    SELECT
        A16.INTEREST_RATE_CD
        ,SUM(CASE TERM WHEN '1D' THEN A16.INTEREST_RATE ELSE 0 END) AS D1
        ,SUM(CASE TERM WHEN '7D' THEN A16.INTEREST_RATE ELSE 0 END) AS D7
        ,SUM(CASE TERM WHEN '14D' THEN A16.INTEREST_RATE ELSE 0 END) AS D14
        ,SUM(CASE TERM WHEN '1M' THEN A16.INTEREST_RATE ELSE 0 END) AS M1
        ,SUM(CASE TERM WHEN '2M' THEN A16.INTEREST_RATE ELSE 0 END) AS M2
        ,SUM(CASE TERM WHEN '3M' THEN A16.INTEREST_RATE ELSE 0 END) AS M3
        ,SUM(CASE TERM WHEN '6M' THEN A16.INTEREST_RATE ELSE 0 END) AS M6
        ,SUM(CASE TERM WHEN '9M' THEN A16.INTEREST_RATE ELSE 0 END) AS M9
        ,SUM(CASE TERM WHEN '1Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y1
        ,SUM(CASE TERM WHEN '2Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y2
        ,SUM(CASE TERM WHEN '3Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y3
        ,SUM(CASE TERM WHEN '5Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y5
        ,SUM(CASE TERM WHEN '7Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y7
        ,SUM(CASE TERM WHEN '10Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y10
        ,SUM(CASE TERM WHEN '15Y' THEN A16.INTEREST_RATE ELSE 0 END) AS Y15
    FROM FACT_FTP260_BSC_A16 A16
    GROUP BY 
         A16.INTEREST_RATE_CD

    查询结果:

     

     

    二、列转行

    1、使用对应的UNPIVOT函数

    函数说明:

            UNPIVOT(自定义列名1【列的值】  FOR  自定义列名2【列名】  IN(【列名】))

            其中,【列的值】字段,是将我们的值字段转为行数据中的【自定义列名1】;【列名】是将我们的列标题字段转为行数据中的【自定义列名2】,【列名】即是转为行的列名。

     

            我们使用上面的结果为例子:

    查询SQL图:

    SQL:

    WITH TEMP AS (
        SELECT * FROM (
          SELECT A16.INTEREST_RATE_CD, A16.DATA_DT, A16.TERM, A16.INTEREST_RATE
          FROM FACT_FTP260_BSC_A16 A16
        )
        PIVOT(
                SUM(INTEREST_RATE)
                FOR TERM
                IN ('1D' AS D1,  '7D' AS D7,  '14D' AS D14, '1M'  AS M1,   '2M' AS M2
                   ,'3M' AS M3,  '6M' AS M6,  '9M'  AS M9,  '1Y'  AS Y1,   '2Y' AS Y2
                   ,'3Y' AS Y3,  '5Y' AS Y5,  '7Y'  AS Y7,  '10Y' AS Y10, '15Y' AS Y15 )
            )
    )


    SELECT *
    FROM TEMP T
    UNPIVOT(
         "利率值INTEREST_RATE"
         FOR "产品编码TERM"
         IN(D1, D7, D14, M1, M2, M3, M6, M9,
            Y1, Y2, Y3, Y5, Y7, Y10, Y15)
        )

    查询结果:

    以后有其他方法,陆续更新-----------------------------------------------------------------

    展开全文
  • oracle 行转列

    2011-09-01 11:14:27
    oracle 行转列sql语句写法, 附带例子
  • 关于oracle行转列函数

    千次阅读 2021-01-27 11:47:59
    关于oracle行转列函数LISTAGG()XMLAGG() LISTAGG() 例如: 查出每个职位的所有人名单: 但是如果遇到转为一行后的字段过于太长太长,会报错,如下: 这样只有使用另一种方法查出来转为行的结果类型转为clob ...

    关于oracle行转列函数

    LISTAGG()

    在这里插入图片描述

    例如:

    在这里插入图片描述
    查出每个职位的所有人名单:
    在这里插入图片描述


    但是如果遇到转为一行后的字段过于太长太长,会报错,如下:
    在这里插入图片描述

    在这里插入图片描述
    这样只有使用另一种方法查出来转为行的结果类型转为clob
    LISTAGG函数返回的是一个varchar2类型的数据,最大字节长度为4000
    XMLAGG函数返回的类型为CLOB,最大字节长度为32767


    XMLAGG()

    xmlagg函数

    例如:

    在这里插入图片描述
    查出每个职位的所有人名单:
    在这里插入图片描述
    点开clob每个字段内容看看:在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • oracle行转列转行

    万次阅读 多人点赞 2018-05-26 13:17:54
    行转列:PIVOT转行:UNPIVOT这两个是在oracle11g上面新增的函数。下面举例说明用法。PIVOT:学生成绩表,原数据:select class_name, student_name, course_type, result, created_date from class_tmp_2;每个...
  • Oracle 行转列 动态出转换的

    万次阅读 多人点赞 2018-10-02 13:03:23
    10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后,因为pivot的用法中,正常情况下,我们需要出多少个,都得在我们的sql中完完整整地写出,而不能直接在里面写个查询来动态转换。然后,趁着...
  • Oracle行转列详解

    万次阅读 2019-07-05 17:16:00
    一、建表与插入数据 1.1、建表 ...3.1、使用PL/SQL ... --存放最终的SQL ... LV_SQL VARCHAR2(3000);... --存放连接的SQL ...自: https://blog.csdn.net/w892824196/article/details/82222193
  • --拼接字符串 用decode 函数 sum(decode(条件,参数,值1,值2) 行转列 条件满足(等于)参数 返回 值1 ,不满足(不等于)返回 值2 V_SQL := V_SQL || ',' || 'SUM(DECODE(CLASS,''' || C.CLASS || ''',score,0...
  • Oracle 行转列 pivot函数基本用法

    万次阅读 多人点赞 2018-09-30 23:28:05
    2018年9月30日22点,眼看着就10月份了,回头看下,8月份就写了一...所以暂时先写个Oracle自带的行转列函数,pivot的基本用法。国庆几天看下有时间的话完善一下动态转的做法,到时候再另写一篇附链接过来。 一、运...
  • 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存儲的值是有逗號的字符串,希望通過逗號分隔開來顯示多行。sql,有預期結果,有項目實戰。
  • Oracle 行转列转行 的Sql语句总结
  • 行转列) 和 unpivot (转行) pivot 转行 测试数据 (id,类型名称,销售数量),案例:根据水果的类型查询出一条数据显示出每种类型的销售数量。 create table demo(id int,name varchar(20),nums...
  • Oracle实现动态行转列

    千次阅读 2019-08-02 13:39:23
    oracle中要实现行转列的方式有很多种,比如case when …else …end 、wm_concat()函数,lag() over() 、lead() over() 函数等,以及11g版本后的pivot函数都可实现。可根据具体的需求选取不同的方式。 前两天恰好一...
  • Oracle SQL函数pivot、unpivot转置函数实现行转列转行
  • oracle行转列(动态行转不定)

    千次阅读 2018-07-26 09:16:00
    ---------------------------------------------------------------行转列的存储过程 CREATE OR REPLACE PROCEDURE P_TEST IS V_SQL VARCHAR2(2000); CURSOR CURSOR_1 IS SELECT DISTINCT T.XCLCK FROM TEST T ...
  • 多行字符串这个比较简单,用||或concat函数可以实现 SQL Code 12 select concat(id,username) str from app_userselect id||username str from app_user字符串实际上就是拆分字符串的问题,可以...
  • Oracle 行转列小结

    万次阅读 热门讨论 2015-07-26 12:45:51
    最近在工作中,对行转列进行了应用,在此做一个简单的小结。  转换过程如下:   1、创建表结构 CREATE TABLE RowToCol ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2...
  • 右边是后数据,数不确定。 主要分3步 --1-----------------------创建存储过程------------------------- CREATE OR REPLACE PROCEDURE P_TEST IS --定义变量 拼接语句 V_SQL VARCHAR2(2000); --...
  • Oracle 行转列

    千次阅读 2015-06-23 11:03:32
    -- Start 在网上看到这样一个问题. ...Oracle SQL 精萃 --  声明:转载请注明出处 -- Last edited on 2015-06-23 -- Created by ShangBo on 2015-06-23 -- End
  • oracle行转列函数

    万次阅读 2016-12-05 18:03:39
    我们通过 10g 所提供的 WMSYS.WM_CONCAT 函数即可以完成 行转列的效果        select t.rank, WMSYS.WM_CONCAT(t.Name) TIME From t_menu_item t GROUP BY t.rank; DEPTNO ENAME ------ ---------- ...
  • oracle行转列,字符串拼接

    千次阅读 2018-11-19 11:37:33
    WMSYS.WM_CONCAT_IMPL PL/SQL: 数字或值错误 : 字符串缓冲区太小 特殊说明 : 在使用 WMSYS.WM_CONCAT,SYS.STRAGG 聚合函数的时候,里面的值是没有顺序的,如果多个字段同时使用了此聚合函数,他们之前的顺序并不...
  • Oracle 动态SQL实现SQL查询子集行转列

    千次阅读 2015-08-21 16:38:36
    动态SQL实现SQL查询子集行转列
  • Oracle 多行

    千次阅读 2019-09-19 16:52:42
    今天碰到个需求是多行,在网上没找到类似问题(多行)的有效解决方法 这是我个人头脑风暴出的解决方式,请参考 比如一个表,有多个维度(时间,险种,机构), -- Create table create table t ( ...
  • Oracle行转列转行大全

    千次阅读 2017-08-31 09:13:31
    函数wm_concat(列名)介绍:该函数可以把值以","号分隔起来,并显示成一 准备测试数据: create table test(id number,name varchar2(20)); insert into test values(1,'a'); insert into test values(1,'b...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,280
精华内容 92,912
关键字:

oracle行转列sql