sqlServer 行列轉換之多行轉一行

2022-04-06 10:17:51 字數 1728 閱讀 6849

記得在剛進專案組時候,使用oracle資料庫,遇到的第乙個難題就是行列轉換,哈哈,真是菜的一bi,現在使用sqlserver資料庫,又遇到了,記錄一下,以備後用和幫助後來者。

言歸正傳:

資料庫:sqlserver2008r2 英文版

1.建表:學生表(姓名,學科,成績)

create table teststudent(

stuname varchar(50) null,

subjects varchar(50) null,

source int null

)drop table teststudent ;

select * from teststudent ;

delete from teststudent ;

2.準備資料:

insert into teststudent(stuname,subjects,source) values('小明','語文',80);

insert into teststudent(stuname,subjects,source) values('小明','數學',85);

insert into teststudent(stuname,subjects,source) values('小明','英語',90);

insert into teststudent(stuname,subjects,source) values('小紅','語文',86);

insert into teststudent(stuname,subjects,source) values('小紅','數學',90);

insert into teststudent(stuname,subjects,source) values('小紅','英語',85);

insert into teststudent(stuname,subjects,source) values('小亮','語文',99);

insert into teststudent(stuname,subjects,source) values('小亮','數學',99);

insert into teststudent(stuname,subjects,source) values('小亮','英語',100);

3.轉換:可以採用max()、sum()兩種方式

--方式1:

select stuname ,

max(case when subjects = '語文' then source else 0 end ) '語文',

max(case when subjects = '數學' then source else 0 end ) '數學',

max(case when subjects = '英語' then source else 0 end ) '英語'

from teststudent group by stuname ;

--方式2:

select stuname ,

sum(case when subjects = '語文' then source else 0 end) '語文',

sum(case when subjects = '數學' then source else 0 end ) '數學',

sum(case when subjects = '英語' then source else 0 end ) '英語'

from teststudent group by stuname ;

4.其他待補充

SQL Server行列轉換

行列轉換應該非常廣泛,也就是常說的交叉表,範例如下 注意事項 資料庫相容性級別 sql server 2005 90 建立臨時測試表 create table test 姓名 varchar 10 課程 varchar 10 分數 int insert into test values 張三 語文 ...

SQL Server 行列轉換

報表顯示需求,查詢結果往往需要做一些行列轉換或列行轉換來顯示。就以這個例子的資料來源做演示。正常查詢結果顯示和執行結果,如下 下面演示,把 rid 和 dt 作為列顯示 view code select rid sum case when dt 2011 01 23 then hits end as...

SQL Server 行列轉換 2

參考前乙個例子現想使用另外一種方式來處理行列轉換,實現下面效果 產生唯一字段,稍後為迴圈使用 rid nvarchar 2 dt date,hits int 把需要處理的資料記錄預存入這個臨時表中 insert into dbo t select rid dt hits from dbo recor...