oracle怎么行变列 oracle中行转列

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 行转换为列

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

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

我的写法大概是子查询+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怎么行变列 oracle中行转列
文章出自:http://ybzwz.com/article/hhehgp.html