-
2021-10-08 16:03:25
原数据
select id,name from T_SJZX_DMJZX where ssdm='GBT_XZQH' and rownum <6;
执行结果如下:
ID NAME 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:30NULL 博文链接:https://13966692733-163-com.iteye.com/blog/1192434 -
Oracle行转列(不定列)
2019-04-20 01:35:31NULL 博文链接:https://vernonchen163.iteye.com/blog/1902976 -
oracle 行转列
2019-03-29 01:14:57NULL 博文链接:https://lipeixiaoyu.iteye.com/blog/1281625 -
Oracle 行转列
2021-09-08 18:18:00Oracle行转列 第一种方式 建多张表 #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;
#2.创建1~50的RN表。 CREATE TABLE PALAN.NUM_LIST AS SELECT RN FROM PALAN.TZ_ZY_DIAG WHERE DATE1 = '2018-11' ORDER BY RN;
#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;
第二种方式 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" ));
第三种方式 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;
第四种方式 LISTAGG
#第四种方式 LISTAGG SELECT DATES, LISTAGG(DIAG_NAME||'---'||PID, ' ') WITHIN GROUP (ORDER BY TO_NUMBER(PID) DESC) FROM SYSTEM.IN_DIAG_TOP50 GROUP BY DATES
-
oracle行转列_列转行
2012-11-09 15:11:27oracle行转列_列转行,实例加解析,自己测试没问题。免费分享了~ -
Oracle行转列之pivot
2013-03-15 20:45:13oracle数据库最详细的行转列资料,是官方文档的详细介绍版,中文的 -
oracle行转列、列转行总结
2022-04-13 15:03:481.行转列 (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:16oracle行转列(感觉不该叫这个名字)小记录 一、工具 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函数差不多就是就干了一个把第一列数据进行分组(就是去重),然后将原表中需要转换的列进行一下转置,再切分转置后的表,这样的工作。
- -
oracle行转列聚合函数WMSYS.WM_CONCAT
2012-05-31 12:50:57行转列函数,对于学习sql查询的朋友们,可能会遇到这样的要求,此文档中做了详细记载,希望可以帮到你! -
oracle行转列(动态行转不定列)
2021-05-02 07:30:342019独角兽企业重金招聘... ---------------------------------------------------------------行转列的存储过程CREATE OR REPLACE PROCEDURE P_TEST ISV_SQL VARCHAR2(2000);CURSOR CURSOR_1 IS SELECT DISTINCT... -
Oracle行转列函数
2020-12-22 13:52:39Oracle行转列函数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)... -
oracle 行转列~列转行(几种方法)
2020-12-21 03:34:52工作中,我们经常会碰到行转列的情况这里我介绍几种简单的方法--行转列1.oracle的pivot函数原表使用pivot函数:with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual union allselect '... -
Oracle行转列、列转行的几种方法
2019-11-08 15:58:46Oracle 11g之后,支持使用PIVOT实现行转列 函数说明: PIVOT(任意聚合函数 FOR 列名 IN(类型)) 其中,【聚合函数】聚合的字段,是需要转化为列值的字段;【列名】是需要转化为列标识的字段,【类型】即是... -
关于oracle行转列函数
2021-01-27 11:47:59关于oracle行转列函数LISTAGG()XMLAGG() LISTAGG() 例如: 查出每个职位的所有人名单: 但是如果遇到转为一行后的字段过于太长太长,会报错,如下: 这样只有使用另一种方法查出来转为行的结果类型转为clob ... -
oracle行转列、列转行查询语句
2021-11-22 14:25:031、行转列 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 * ... -
Oracle: Oracle行转列、列转行的Sql语句总结
2020-12-21 03:34:52运行结果: 二、行转列 将某个字段的多行结果,拼接成一个字段,获取拼接的字符串【默认逗号隔开】 select wm_concat(bkg_num) from CD_XLS_UPLOAD_DETAIL where cd_xls_upload_uuid='392' ; 运行结果: 6098621760... -
Oracle 行转列、列转行详解(pivot、unpivot)
2021-09-17 09:24:15pivot:行转列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 -
ORACLE行转列、列转行函数
2020-04-26 10:58:56行转列函数--pivot欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居... -
Oracle行转列、列转行的Sql语句总结(转)
2019-02-27 09:56:57多行转字符串 这个比较简单,用||或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 "上级机构...