資料庫記錄的行列轉換

2021-04-08 16:55:39 字數 1791 閱讀 1659

行列轉換分兩種情況:下面分別用例子來說明

第一種: 固定行

測試用表

create

table a_test(

student varchar2(255),

subject varchar2(255),

grade   number(9));

測試記錄

insert

into a_test values('st1','

語文',80);

insert

into a_test values('st1','

數學',70);

insert

into a_test values('st1','

物理',90);

insert

into a_test values('st2','

語文',75);

insert

into a_test values('st2','

數學',84);

insert

into a_test values('st2','

物理',69);

select

* from a_test

顯示結果如下圖:

轉換的sql

為:select

student,

sum(decode(subject,'語文',grade,

null)) 語文,

sum(decode(subject,'數學',grade,

null)) 數學,

sum(decode(subject,'

物理',grade,null))

物理from a_test

group

by student

此時查詢的結果為:

第二種情況:非固定行轉換

相對於固定行可能這個轉換要稍微複雜一些,可以自己編寫乙個函式來完成。具體見下面的例子。

測試表:

create table a_test1(

c1 number(9),

c2 varchar2(255)

);測試記錄

insert into a_test1 values(1,'我');

insert into a_test1 values(1,'是');

insert into a_test1 values(1,'誰');

insert into a_test1 values(2,'知');

insert into a_test1 values(2,'道');

insert into a_test1 values(3,'不');

select * from a_test 顯示結果如下圖:

輔助方法:

create or replace function getc21(temp_c1 number)

return varchar2

isvar_c2 varchar2(255);

begin

for var in (select c2 from a_test1 where c1 = temp_c1)

loop

var_c2 := var_c2 || var.c2;

end loop;

var_c2 := rtrim(var_c2,1);

return var_c2;

end;

行列轉換的sql

select distinct c1, getc21(c1) c22 from a_test1

此時查詢的結果為:

資料庫行列轉換

資料庫中的 要求查詢出的資料 初始化環境 1 建表 create table studentresult name varchar 50 subject varchar 50 result int 2 插入資料 insert into studentresult values 張三 語文 80 in...

資料庫之SQL行列轉換

資料分析經常會遇到行列轉換,sql中的行列轉化集可以用常規的case when union all語句,也可以用專門的行列轉換函式pivot和unpivot。資料表表1 t1 如下表所示,是資料庫常見的儲存形式,課程的分數按行記錄 姓名課程 分數張三 語文80 張三數學 90張三 英語98 李四語文...

SQL2005資料庫行列轉換

注意 列轉行的方法可能是我獨創的了,呵呵,因為在網上找不到哦,全部是我自己寫的,用到了系統的syscolumns 一 行轉列的方法 先說說行轉列的方法,這個就比較好想了,利用拼sql和case when解決即可 實現目的 name nvarchar 10 null,名稱 course nvarcha...