真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle如何行變列 oracle將列轉(zhuǎn)行

Oracle列轉(zhuǎn)行,行轉(zhuǎn)列

oracle下可以用函數(shù)decode處理:

成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)清河門,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108

select 產(chǎn)品名稱,

sum(decode(季度,'第一季度',銷售額,0)) 第一季度銷售額,

sum(decode(季度,'第二季度',銷售額,0)) 第二季度銷售額,

sum(decode(季度,'第三季度',銷售額,0)) 第三季度銷售額,

sum(decode(季度,'第四季度',銷售額,0)) 第四季度銷售額,

from 表名

group by 產(chǎn)品名稱;

oracle數(shù)據(jù)庫(kù)關(guān)于把表的行變成列

姓名 數(shù)學(xué) 語(yǔ)文 姓名 張飛 趙云 龐統(tǒng)

張飛 60 61 數(shù)學(xué) 60 80 99

趙云 80 85 變成 語(yǔ)文 61 85 80

龐統(tǒng) 99 80

而且第一行為列名,不是表中的數(shù)據(jù),這樣的話

也就是第一個(gè)表下面三行的數(shù)據(jù),變成第二個(gè)表下面兩行的數(shù)據(jù)

這樣還是可以的

oracle 行轉(zhuǎn)換為列

如果你要做轉(zhuǎn)換查詢,真心勸你不要這么干,我的寫法很麻煩,一張表不停的查詢,邏輯讀肯定搞得要死。

如果是往下面這張表灌數(shù),那么可以寫循環(huán),慢慢來(lái)一行對(duì)應(yīng)一列,可以根據(jù)表的列和數(shù)據(jù)的對(duì)應(yīng)關(guān)系往里面灌,這個(gè)相對(duì)簡(jiǎn)單些。

我的寫法大概是子查詢+union

all

上面為a表

那么就寫為select

‘第一季度'

銷售額,(select

第一季度銷售額

from

a

where

產(chǎn)品名稱='奶酪')奶酪,(select

第一季度銷售額

from

a

where

產(chǎn)品名稱='啤酒')

from

dual

union

all

還像上面那么寫,寫第二季度

union

all

第三季度

union

all

第四季度

一張表重讀查詢8次,如果表很大,我估計(jì)機(jī)器會(huì)宕掉的。

因?yàn)閱为?dú)從一列來(lái)看也可以理解為列轉(zhuǎn)行,所以用case

when寫也可以,這么寫似乎讀取的次數(shù)會(huì)少些,不過(guò)要用到group

by分組,天知道二者最后誰(shuí)的消耗大。不過(guò)如果表很大的話,還是那句話,建議新建表然后灌數(shù),這么直接查,真的會(huì)死掉的。

以上為個(gè)人建議,如果找到什么好寫法,也可以研究下。

oracle如何實(shí)現(xiàn)行轉(zhuǎn)列

用union all

假設(shè)列名分別為 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 ...

關(guān)于oracle的查詢結(jié)果的行列互換

/*

在實(shí)際使用sql工作中總會(huì)碰到將某一列的值放到標(biāo)題中顯示 就是總說(shuō)的行列轉(zhuǎn)換或者互換

比如有如下數(shù)據(jù):

ID NAME?????? KECHENG????????????? CHENGJI

a????????? 語(yǔ)文????????????????

a????????? 數(shù)學(xué)????????????????

b????????? 語(yǔ)文????????????????

b????????? 數(shù)學(xué)????????????????

c????????? 語(yǔ)文????????????????

c????????? 數(shù)學(xué)????????????????

那末我要求顯示的結(jié)果是:

NAME?????? YUWEN????????????????? SHUXUE

a????????? ????????????????????

也就是說(shuō)把課程這一列放到行上顯示 把成績(jī)按照課程分配到相對(duì)應(yīng)的行

我只介紹 中簡(jiǎn)單易用的方法 使用游標(biāo)或者建立臨時(shí)表的方法就不介紹了 效率很慢 不易理解

首先建立表:

*/

create table fzq

(

id varchar( )

name varchar( )

kecheng varchar( )

chengji varchar( )

);

插入數(shù)據(jù):

insert into fzq values ( a 語(yǔ)文 );

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 如果課程這列有多個(gè)值 那么腳本的代碼就很長(zhǎng)了 */

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;

/*執(zhí)行結(jié)果:

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;

/*執(zhí)行結(jié)果:

NAME?????? YUWEN????????????????? SHUXUE

a????????? ????????????????????

b????????? ????????????????????

c????????? ????????????????????

所有例子在oracle中測(cè)試 sql server沒(méi)有測(cè)試 請(qǐng)根據(jù)實(shí)際情況修改

*/

select name sum(decode(kecheng 語(yǔ)文 chengji null)) 語(yǔ)文

sum(decode(kecheng 數(shù)學(xué) chengji null)) 數(shù)學(xué)

sum(decode(kecheng 英語(yǔ) chengji null)) 英語(yǔ)

from fzq

lishixinzhi/Article/program/Oracle/201311/18036


分享名稱:oracle如何行變列 oracle將列轉(zhuǎn)行
標(biāo)題URL:http://weahome.cn/article/hpdchj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部