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

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

oracle值怎么轉(zhuǎn)列 oracle怎么行轉(zhuǎn)列

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

/*

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了西陵免費建站歡迎大家使用!

在實際使用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數(shù)據(jù)庫里面如何把一行數(shù)據(jù)轉(zhuǎn)化為列顯示

可用union all來實現(xiàn)。

如test表中數(shù)據(jù)如下:

現(xiàn)要將id為3的一條按列顯示,可用如下語句:

select?to_char(id)?str?from?test?where?id=3

union?all

select?name?from?test?where?id=3;

查詢結(jié)果:

oracle 根據(jù)某一行的值轉(zhuǎn)化成列?

樓主這種 典型的行列轉(zhuǎn)換問題。

Oracle 一般就通過 DECODE 或者 CASE WHEN 來處理。

SQL CREATE TABLE TEST_YLX (

2 name VARCHAR2(2),

3 zfname VARCHAR2(6),

4 tdate DATE

5 );

Table created.

SQL

SQL INSERT INTO TEST_YLX VALUES ('A', 'size1', TO_DATE('2010-02-01', 'YYYY-MM-D

D') );

1 row created.

SQL INSERT INTO TEST_YLX VALUES ('A', 'size2', TO_DATE('2010-02-01', 'YYYY-MM-D

D') );

1 row created.

SQL INSERT INTO TEST_YLX VALUES ('B', 'size1', TO_DATE('2010-02-01', 'YYYY-MM-D

D') );

1 row created.

SQL INSERT INTO TEST_YLX VALUES ('C', 'size3', TO_DATE('2010-02-01', 'YYYY-MM-D

D') );

1 row created.

SQL

SQL SELECT

2 name,

3 SUM ( DECODE(zfname, 'size1', 1, 0) ) AS size1,

4 SUM ( DECODE(zfname, 'size2', 1, 0) ) AS size2,

5 SUM ( CASE WHEN(zfname = 'size3') THEN 1

6 ELSE 0

7 END

8 ) AS size3

9 FROM

10 test_ylx

11 GROUP BY

12 name;

NAME SIZE1 SIZE2 SIZE3

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

A 1 1 0

B 1 0 0

C 0 0 1

SQL

上面的例子中, size1 和 size2 是用 DECODE

size3 用 CASE WHEN

看具體情況需要,而使用。

========================================

唯一麻煩的是

這個SQL, 需要預(yù)先知道, size1 size2 size3 這些信息

如果表中新增加了 size4 , 需要修改 SQL 語句。


分享名稱:oracle值怎么轉(zhuǎn)列 oracle怎么行轉(zhuǎn)列
當前路徑:http://weahome.cn/article/hggoed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部