資料庫中的**:
要求查詢出的資料:
初始化環境:
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...