行列轉換分兩種情況:下面分別用例子來說明
第一種: 固定行
測試用表
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...