oracle 列行转换

1.列转换  1:每个字母转成一行

SELECT SUBSTR(A.COLUMN1, LEV, 1) COLUMN1
FROM (
     SELECT ‘AABDC‘ COLUMN1 FROM DUAL
) A,
(SELECT LEVEL LEV FROM DUAL CONNECT BY LEVEL<=100) B
WHERE LEV <= LENGTH(A.COLUMN1);

2.通过“,”通过列转行

SELECT COLUMN1, REGEXP_SUBSTR(A.COLUMN2 ,‘[^,]+‘, 1, LEV) COLUMN2
FROM (
     SELECT ‘001‘ AS COLUMN1, ‘0,2,3‘ COLUMN2 FROM DUAL
) A,
(SELECT LEVEL LEV FROM DUAL CONNECT BY LEVEL<=100) B
WHERE LEV <= LENGTH(A.COLUMN2) - LENGTH(REPLACE(COLUMN2,‘,‘))+1;

3.行转列

原始数据:

SELECT T.COLUMN1, MAX(T.COLUMN2) COLUMN2 FROM (
     SELECT S.COLUMN1, WM_CONCAT(S.COLUMN2) OVER (PARTITION BY S.COLUMN1  ORDER BY S.COLUMN2) COLUMN2 FROM (
          SELECT ‘001‘ COLUMN1, ‘0‘ COLUMN2 FROM DUAL
          UNION ALL SELECT ‘001‘ COLUMN1, ‘3‘ COLUMN2 FROM DUAL
          UNION ALL SELECT ‘001‘ COLUMN1, ‘2‘ COLUMN2 FROM DUAL
    ) S
) T GROUP BY T.COLUMN1;

结果:

时间: 2024-11-07 04:48:52

oracle 列行转换的相关文章

pivot列行转换,自动计算分组,解决groupby问题

select top 20 * from ( select PromotionRateAmount,(cast(year(ReserveDate) as varchar(4))+cast(month(ReserveDate) as varchar(2))) as MonthSum,OrderId from [PAAmountAndDay] WITH(NOLOCK) where orderid in (select distinct orderid from [FlMortgageDetailGr

Oracle 多行转多列

Oracle 多行转多列,列值转为列名 前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的,,终于功夫不负有心人 然后最终自己写出来了,decode才是核心 废话不多说,看图 需求示例图表: 存储过程,嘿嘿: 1 create or replace procedure NAG_QUESTIONERSULT_EXP( 2 V_QID in number, 3 C_Title out sys_r

Oracle中“行转列”的实现方式

在报表的开发当中,难免会遇到行转列的问题. 以Oracle中scott的emp为例,统计各职位的人员在各部门的人数分布情况,就可以用“行转列”: scott的emp的原始数据为: EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO 7369 SMITH CLERK 7902 12/17/1980 800.00 20 7499 ALLEN SALESMAN 7698 2/20/1981 1600.00 300.00 30 7521 WARD SALESMAN

oracle 多行转一列,一列转多行

oracle 多行转一列,如下: select to_char(wmsys.wm_concat(t.candi_supplier_id))   from PS.T_PS_BU_AWARD_SUPPLIER t; 通过oracle 10g 提供的wmsys.wm_concat函数,即可以完成行转列的效果. 一列转多行,如下: with a as (select '/ABC/AA/AD/ABD/JI/CC/ALSKD/ALDKDJ' id from dual)select regexp_substr

Oracle 多行合并一行 方法

假如有如下表,其中各个i值对应的行数是不定的 Sql代码 SQL> select * from t; I A          D ---------- ---------- ------------------- 1 b          2008-03-27 10:55:42 1 a          2008-03-27 10:55:46 1 d          2008-03-27 10:55:30 2 z          2008-03-27 10:55:55 2 t       

Oracle多行记录合并的几种方法

今天正好遇到需要做这个功能,顺手搜了一下网络,把几种方法都列出来,方便以后参考. 1 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default Comments ------- ------------ -------- ------- -------- COUNTRY VARCHAR2(20) Y CITY VARCHAR2(20) Y SQL> select * from test; COUNTRY CITY ---

MySql和Oracle的日期转换到底有哪些不同?我们来比较一下

1.MySql和Oracle的日期转换 mysql中有2种日期格式DATE和TIME,oracle只有一种日期格式DATE. oracle> select to_char(sysdate,'yyyy-mm-dd') from dual; oracle> select to_char(sysdate,'hh24-mi-ss') from dual; mysql> select date_format(now(),'%Y-%m-%d'); mysql> select time_form

Oracle列自增实现(2)-Identity Columns in Oracle Database 12c Release 1 (12.1)

Oracle列自增-Identity Columns in Oracle Database 12c Release 1 (12.1) 在ORACLE 12C以前的版本中,如果要实现列自增长,需要通过序列+触发器实现,到了12C ORACLE 引进了Identity Columns新特性,从而实现了列自增长功能. 一.Identity Columns使用语法 GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ] AS IDENTITY [ ( identity

Oracle命令行工具基本操作及SQL 命令

Oracle命令行工具基本操作及SQL 命令 1. 基本概念1.1. 数据类型基本数据类型(NUMBER,VARCHAR2,DATE)O RACEL支持下列内部数据类型:VARCHAR2 变长字符串,最长为2000 字符.NUMBER 数值型.LONG 变长字符数据,最长为2G字节.DATE 日期型.RAW 二进制数据,最长为255字节.LONG RAW 变长二进制数据,最长为2G字节.ROWID 二六进制串,表示表的行的唯一地址.CHAR 定长字符数据,最长为255.2. SQL*PLUS这是