资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

oracle如何列变行,oracle怎么列转行

怎样将oracle中的列变成行

固定列数的行列转换如

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、虚拟空间、营销软件、网站建设、云梦网站维护、网站推广。

student subject grade

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

student1 语文 80

student1 数学 70

student1 英语 60

student2 语文 90

student2 数学 80

student2 英语 100

转换为

语文 数学 英语

student1 80 70 60

student2 90 80 100

语句如下:

select student,sum(decode(subject,'语文', grade,null)) "语文",

sum(decode(subject,'数学', grade,null)) "数学",

sum(decode(subject,'英语', grade,null)) "英语"

from table

group by student

2、不定列行列转换如

c1 c2

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

1 我

1 是

1 谁

2 知

2 道

3 不

......

转换为

1 我是谁

2 知道

3 不

这一类型的转换必须借助于PL/SQL来完成,这里给一个例子

CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)

RETURN VARCHAR2

IS

--用于返回值

Col_c2 VARCHAR2(4000);

BEGIN

FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP

Col_c2 := Col_c2||cur.c2;

END LOOP;

Col_c2 := rtrim(Col_c2,1);

RETURN Col_c2;

oracle中将列数据变成行数据

首先,你用的char类型,会自动在你字符串后边补空格,所以要用trim去空格

还有,你第二个decode,你没发现跟上边不同吗?decode最后那用0吧,省得出错,别用null,用这个吧

select a.name,

sum(decode(trim(a.course),'语文',a.score,0))as"语文",

sum(decode(trim(a.course),'数学',a.score,0))as"数学"

from test a group by a.name order by a.name desc

如何把ORACLE数据表的列变成行

固定列数的行列转换如

student subject grade

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

student1 语文 80

student1 数学 70

student1 英语 60

student2 语文 90

student2 数学 80

student2 英语 100

转换为

语文 数学 英语

student1 80 70 60

student2 90 80 100

语句如下:

select student,sum(decode(subject,'语文', grade,null)) "语文",

sum(decode(subject,'数学', grade,null)) "数学",

sum(decode(subject,'英语', grade,null)) "英语"

from table

group by student

2、不定列行列转换如

c1 c2

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

1 我

1 是

1 谁

2 知

2 道

3 不

......

转换为

1 我是谁

2 知道

3 不

这一类型的转换必须借助于PL/SQL来完成,这里给一个例子

CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)

RETURN VARCHAR2

IS

--用于返回值

Col_c2 VARCHAR2(4000);

BEGIN

FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP

Col_c2 := Col_c2||cur.c2;

END LOOP;

Col_c2 := rtrim(Col_c2,1);

RETURN Col_c2;

oracle 怎么把列转为行显示

select to_char(wm_concat(name)) from tablename

使用wm_concat函数将列转化成行,使用逗号分割。最后转化成字符串

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数据列转成行

Oracle行转换为列是比较常见,网上常见的例子如下:

grades表:

student subject grade

student1 语文 80

student1 数学 70

student1 英语 60

student2 语文 90

student2 数学 80

student2 英语 10

转换为

语文 数学 英语

Student1 80 70 60

Student2 90 80 100

执行语句如下:

Select student,

sum(decode(subject,'语文',grade,null)) "语文",

sum(decode(subject,'数学',grade,null)) "数学",

sum(decode(subject,'英语',grade,null)) "英语"

from grades

group by student order by student;

Select student,sum(decode(subject,'语文',grade,null)) "语文",sum(decode(subject,'数学',grade,null)) "数学",sum(decode(subject,'英语',grade,null)) "英语"from gradesgroup by student order by student;

下面,介绍列转换为行的操作:

假设一个表test,记录如下:

表头id proc1 proc2 proc3

记录12 3.4 6.7 12.4

想变成如下格式:

表头 id proc value

记录 12 proc1 3.4

记录 12 proc2 6.7

记录 12 proc3 12.4

方法一:采用union all方法(这种方法会随着字段的增多,变得很长,不推荐)

select id,'proc1',proc1

from testjac where id=12

union all

select id,'proc2',proc2

from testjac where id=12

union all

select id,'proc3',proc3

from testjac where id=12;

select id,'proc1',proc1 from testjac where id=12 union all select id,'proc2',proc2 from testjac where id=12 union all select id,'proc3',proc3from testjac where id=12;

方法二:采用decode+系统视图USER_TAB_COLS(推荐):

select A.id,B.column_name,decode(B.column_name,'PROC1',A.proc1,'PROC2',A.proc2,'PROC3',A.proc3,null) value

from test A,(select column_name from user_tab_cols where column_id1 and table_name='TEST') B


分享标题:oracle如何列变行,oracle怎么列转行
文章URL:http://cdkjz.cn/article/hdsods.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220