資料庫行列轉換

2021-09-01 19:01:00 字數 1769 閱讀 4767

資料庫中的**:

要求查詢出的資料:

初始化環境:

1、建表:

create table studentresult( 

name varchar(50),

subject varchar(50),

result int

)

2、插入資料:

insert into studentresult values('張三','語文',80) ;

insert into studentresult values('張三','數學',70) ;

insert into studentresult values('張三','物理',90) ;

insert into studentresult values('李四','語文',75) ;

insert into studentresult values('李四','數學',84) ;

insert into studentresult values('李四','物理',69) ;

方法一:靜態

sql,即只有(數學、語文、物理)

3個科目,沒有其餘科目

select name,

max(case [subject] when '數學' then result else 0 end ) 數學,

max(case [subject] when '語文' then result else 0 end ) 語文,

max(case [subject] when '物理' then result else 0 end ) 物理

from studentresult group by name;

方法二:科目不確定的情況下

--動態sql

--定義變數,sql語句長度

declare @sql varchar(8000)

--設值

set @sql='select name'

select @sql = @sql

+', max(case [subject] when '''+subject+'''then result else 0 end) ['+subject+']'

from (select distinct subject from studentresult) as a

set @sql=@sql+' from studentresult group by name'

--執行sql

exec(@sql);

如果再插入一行

insert into studentresult values('王五','化學',60) ;
下面再分別執行來看看兩者區別

法一:

法二:

資料庫記錄的行列轉換

行列轉換分兩種情況 下面分別用例子來說明 第一種 固定行 測試用表 create table a test student varchar2 255 subject varchar2 255 grade number 9 測試記錄 insert into a test values st1 語文 8...

資料庫之SQL行列轉換

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

SQL2005資料庫行列轉換

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