oracle怎么轉(zhuǎn)換行列 oracle行列轉(zhuǎn)換最簡單的方法

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

/*

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的錦屏網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

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

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

a????????? 語文????????????????

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

b????????? 語文????????????????

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

c????????? 語文????????????????

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

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

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

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

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

我只介紹 中簡單易用的方法 使用游標或者建立臨時表的方法就不介紹了 效率很慢 不易理解

首先建立表:

*/

create table fzq

(

id varchar( )

name varchar( )

kecheng varchar( )

chengji varchar( )

);

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

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;

/*執(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中測試 sql server沒有測試 請根據(jù)實際情況修改

*/

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

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

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

from fzq

lishixinzhi/Article/program/Oracle/201311/18036

Oracle 表格行列轉(zhuǎn)換,高手請進

第二種效率高,首先篩選條件少,二不做匯總時數(shù)據(jù)量也明顯比第一種的少,三不用自連接

怎樣將oracle中的列變成行

固定列數(shù)的行列轉(zhuǎn)換如

student subject grade

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

student1 語文 80

student1 數(shù)學(xué) 70

student1 英語 60

student2 語文 90

student2 數(shù)學(xué) 80

student2 英語 100

轉(zhuǎn)換為

語文 數(shù)學(xué) 英語

student1 80 70 60

student2 90 80 100

語句如下:

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

sum(decode(subject,'數(shù)學(xué)', grade,null)) "數(shù)學(xué)",

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

from table

group by student

2、不定列行列轉(zhuǎn)換如

c1 c2

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

1 我

1 是

1 誰

2 知

2 道

3 不

......

轉(zhuǎn)換為

1 我是誰

2 知道

3 不

這一類型的轉(zhuǎn)換必須借助于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怎么轉(zhuǎn)換行列 oracle行列轉(zhuǎn)換最簡單的方法
當(dāng)前鏈接:http://www.muchs.cn/article6/hphjog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、網(wǎng)頁設(shè)計公司、網(wǎng)站收錄、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)