网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

oracle中怎么列转行 oracle中列转行详解

oracle 列转行

SQL create table t (a number, b varchar2(10));

创新互联公司专注于渝中企业网站建设,响应式网站设计,成都商城网站开发。渝中网站建设公司,为渝中等地区提供建站服务。全流程按需求定制设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

表已创建。

SQL insert into t values(1,'A');

已创建 1 行。

SQL insert into t values(1,'B');

已创建 1 行。

SQL insert into t values(2,'A');

已创建 1 行。

SQL insert into t values(2,'B');

已创建 1 行。

SQL insert into t values(3,'C');

已创建 1 行。

SQL insert into t values(3,'F');

已创建 1 行。

SQL insert into t values(4,'D');

已创建 1 行。

SQL commit;

提交完成。

SQL select a,max(decode(c,1,b,null)),

2 max(decode(c,2,b,null)),

3 max(decode(c,3,b,null))

4 from(select a,b,row_number()over(partition by a order by b ) c from t)

5* group by a

SQL /

A MAX(DECODE MAX(DECODE MAX(DECODE

---------- ---------- ---------- ----------

1 A B

2 A B

3 C F

4 D

SQL

oracle列转行

INSERT INTO 新表 (SELECT ID, '呼吸系统疾病' FROM 原表 WHERE 呼吸系统疾病有无 = 1 UNION SELECT ID, '消化系统疾病' FROM 原表 WHERE 消化系统疾病有无 = 1

UNION SELECT ID, '循环系统疾病' FROM 原表 WHERE 循环系统疾病有无 = 1)

如果使用行转列,还得使用merge into,还不如上面的语句清晰。

Oracle中列转行,如何实现?

基本思路:对每班学生排序,根据序号构造列名,拼接动态sql

--测试数据

create table

("学生" varchar2(10)

,"学号" varchar2(10)

,"班级" varchar2(10)

); 

insert into "表A" 

select '张三','100','一班' from dual union all

select '李四','101','二班' from dual union all

select '王五','102','一班' from dual union all

select '赵六','103','三班' from dual union all

select '李二','104','二班' from dual

--动态拼接Pivot  

declare

sqlstr varchar2(8000):='';

begin

--构造类似于 '学号1','学号2',...  的字符串

for x in (     

select distinct row_number() over (partition by "班级" order by "学号") seq 

from "表A" order by seq ) loop 

sqlstr := sqlstr || ',''' || '学号' ||to_char(x.seq)||''''; 

end loop; 

sqlstr:=substr(sqlstr,2,length(sqlstr)-1);

--将前面构造的字符串放入Pivot语句中

sqlstr:='

select * from (

select "学号","班级", ''学号''|| to_char(

row_number() over (partition by "班级" order by "学号")) seq  

from "表A") t

pivot(

max("学号")

for seq in ('||sqlstr||')  

)';

--dbms_output.put_line(sqlstr);

--将查询结果放入临时视图中

sqlstr := 'CREATE OR REPLACE VIEW tmp_result  AS '|| sqlstr;

--dbms_output.put_line(sqlstr);

execute immediate sqlstr;

end;

--查看结果

select * from tmp_result;

结果如下:

oracle中怎么将列转换为行

可以使用wm_concat()函数;

下面是我做的一个例子,可以参考下,当然具体语法可以百度,也可以去官方文档查:

SCOTT@ ysdb1show user

USER is "SCOTT"

SCOTT@ ysdb1create table test_concat(id number(5),name varchar2(10));

Table created.

SCOTT@ ysdb1insert into test_concat values(1,'a');

1 row created.

SCOTT@ ysdb1insert into test_concat values(1,'b');

1 row created.

SCOTT@ ysdb1insert into test_concat values(1,'c');

1 row created.

SCOTT@ ysdb1insert into test_concat values(2,'q');

1 row created.

SCOTT@ ysdb1insert into test_concat values(2,'w');

1 row created.

SCOTT@ ysdb1insert into test_concat values(2,'e');

1 row created.

SCOTT@ ysdb1insert into test_concat values(2,'f');

1 row created.

SCOTT@ ysdb1select * from test_concat;

ID NAME

---------- ----------

1 a

1 b

1 c

2 q

2 w

2 e

2 f

7 rows selected.

SCOTT@ ysdb1select wm_concat(name) from test_concat;

WM_CONCAT(NAME)

--------------------------------------------------------------------------------

a,b,c,q,w,e,f

SCOTT@ ysdb1select id,wm_concat(name) from test_concat group by id;

ID WM_CONCAT(NAME)

---------- --------------------------------------------------------------------------------

1 a,c,b

2 q,f,e,w

oracle sql 列转行

oracle中列传行可用wm_concat来实现。

如test表中数据如下:

现要将name列一列显示成行,可用如下语句:

select wm_concat(name) from test;结果:


网站题目:oracle中怎么列转行 oracle中列转行详解
浏览路径:http://bjjierui.cn/article/hioegi.html

其他资讯