189 8069 5689

oracle如何列变行,oracle的列转行

怎样将oracle中的列变成行

固定列数的行列转换如

成都创新互联是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的10年时间我们累计服务了上千家以及全国政企客户,如成都葡萄架等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致表扬。

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数据表的列变成行

固定列数的行列转换如

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

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的列转行
标题网址:http://cdxtjz.cn/article/hsjedg.html

其他资讯