oracle如何行变列 oracle将列转行

Oracle列转行,行转列

oracle下可以用函数decode处理:

成都创新互联主要从事网站设计、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务清河门,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

select 产品名称,

sum(decode(季度,'第一季度',销售额,0)) 第一季度销售额,

sum(decode(季度,'第二季度',销售额,0)) 第二季度销售额,

sum(decode(季度,'第三季度',销售额,0)) 第三季度销售额,

sum(decode(季度,'第四季度',销售额,0)) 第四季度销售额,

from 表名

group by 产品名称;

oracle数据库关于把表的行变成列

姓名 数学 语文 姓名 张飞 赵云 庞统

张飞 60 61 数学 60 80 99

赵云 80 85 变成 语文 61 85 80

庞统 99 80

而且第一行为列名,不是表中的数据,这样的话

也就是第一个表下面三行的数据,变成第二个表下面两行的数据

这样还是可以的

oracle 行转换为列

如果你要做转换查询,真心劝你不要这么干,我的写法很麻烦,一张表不停的查询,逻辑读肯定搞得要死。

如果是往下面这张表灌数,那么可以写循环,慢慢来一行对应一列,可以根据表的列和数据的对应关系往里面灌,这个相对简单些。

我的写法大概是子查询+union

all

上面为a表

那么就写为select

‘第一季度'

销售额,(select

第一季度销售额

from

a

where

产品名称='奶酪')奶酪,(select

第一季度销售额

from

a

where

产品名称='啤酒')

from

dual

union

all

还像上面那么写,写第二季度

union

all

第三季度

union

all

第四季度

一张表重读查询8次,如果表很大,我估计机器会宕掉的。

因为单独从一列来看也可以理解为列转行,所以用case

when写也可以,这么写似乎读取的次数会少些,不过要用到group

by分组,天知道二者最后谁的消耗大。不过如果表很大的话,还是那句话,建议新建表然后灌数,这么直接查,真的会死掉的。

以上为个人建议,如果找到什么好写法,也可以研究下。

oracle如何实现行转列

用union all

假设列名分别为 col1 cola colb...

select col1,cola

from tabname

where ...

union all

select col1,colb

from tabname

where ...

union all

select col1,colc

from tabname

where ...

union all

select col1,cold

from tabname

where ...

union all

select col1,cole

from tabname

where ...

union all

select col1,colf

from tabname

where ...

关于oracle的查询结果的行列互换

/*

在实际使用sql工作中总会碰到将某一列的值放到标题中显示 就是总说的行列转换或者互换

比如有如下数据:

ID NAME       KECHENG              CHENGJI

a          语文                

a          数学                

b          语文                

b          数学                

c          语文                

c          数学                

那末我要求显示的结果是:

NAME       YUWEN                  SHUXUE

a                              

也就是说把课程这一列放到行上显示 把成绩按照课程分配到相对应的行

我只介绍 中简单易用的方法 使用游标或者建立临时表的方法就不介绍了 效率很慢 不易理解

首先建立表:

*/

create table fzq

(

id varchar( )

name varchar( )

kecheng varchar( )

chengji varchar( )

);

插入数据:

insert into fzq values ( a 语文 );

insert into fzq values( a shuxue );

insert into fzq values ( b yuwen );

insert into fzq values ( b shuxu );

insert into fzq values ( c yuwen );

insert into fzq values ( c shuxu );

/*首先使用union 如果课程这列有多个值 那么脚本的代码就很长了 */

select name sum(yuwen) yuwen sum(shuxue) shuxue from

(

select name chengji yuwen shuxue from fzq

where kecheng= yuwen union

select name yuwen chengji  shuxue

from fzq

where kecheng= shuxue

) aaa

group BY name;

/*执行结果:

NAME       YUWEN                  SHUXUE

a                              

b                              

c                              

*/

/*

其次是用case 这种方法代码比较短 适合列值很多的情况

*/

select name sum(case kecheng when yuwen then chengji end) yuwen

sum(case kecheng  when shuxue then chengji  end) shuxue

from fzq

group by name;

/*执行结果:

NAME       YUWEN                  SHUXUE

a                              

b                              

c                              

所有例子在oracle中测试 sql server没有测试 请根据实际情况修改

*/

select name sum(decode(kecheng 语文 chengji null)) 语文

sum(decode(kecheng 数学 chengji null)) 数学

sum(decode(kecheng 英语 chengji null)) 英语

from fzq

lishixinzhi/Article/program/Oracle/201311/18036


文章题目:oracle如何行变列 oracle将列转行
当前路径:http://azwzsj.com/article/hpdchj.html