SQL SERVER 行轉列 列轉行

2022-06-21 17:24:09 字數 2921 閱讀 5418

/*

第一步:建立臨時表結構

*/create

table #student --

建立臨時表

( stuname

nvarchar(20), --

學生名稱

stusubject nvarchar(20),--

考試科目

stuscore int

--考試成績

)drop

table #student --

刪除臨時表

select

*from #student --

查詢所有資料

/*第二步:寫入測試資料

*/--

張三insert

into #student(stuname,stusubject,stuscore) values ('

張三','

語文',80

);

insert

into #student(stuname,stusubject,stuscore) values ('

張三','

數學',75

);insert

into #student(stuname,stusubject,stuscore) values ('

張三','

英語',65

);--

李四insert

into #student(stuname,stusubject,stuscore) values ('

李四','

語文',36

);

insert

into #student(stuname,stusubject,stuscore) values ('

李四','

數學',56

);insert

into #student(stuname,stusubject,stuscore) values ('

李四','

英語',38

);--

王五insert

into #student(stuname,stusubject,stuscore) values ('

王五','

語文',69

);

insert

into #student(stuname,stusubject,stuscore) values ('

王五','

數學',80

);insert

into #student(stuname,stusubject,stuscore) values ('

王五','

英語',78

);--

趙六insert

into #student(stuname,stusubject,stuscore) values ('

趙六','

語文',80

);

insert

into #student(stuname,stusubject,stuscore) values ('

趙六','

數學',80

);insert

into #student(stuname,stusubject,stuscore) values ('

趙六','

英語',95);

--

1、case when 方法

select

stusubject

,sum(case

when stuname='張三

'then stuscore end) as'張三

',sum(case

when stuname='王五

'then stuscore end) as'王五

',sum(case

when stuname='趙六

'then stuscore end) as'趙六

'from

#student

group

by stusubject

--

2使用pivot 關鍵字

select

*from

#student

pivot(

sum(stuscore) for

[stuname

]in("李四","王五","張三","趙六")) as t

--

方法3:使用pivot、exec關鍵字,動態執行

declare

@stuname

varchar(100

);declare

@sql

nvarchar(4000)--

步驟1.假設列不固定,是動態產生的,需要先將所有列組合成乙個長字串,比如a,b,c , 下面的寫法只能在sql server2017中執行,更多將多行字段合併成乙個字段方法參考:

select

@stuname='

"'+string_agg(stuname,'

","')+'"

'from

(

select stuname from #student group

bystuname

) as

te--

print @stuname

--步驟2.由於動態產生的列,指令碼不能執行,所以用exec來執行,把指令碼寫成乙個字串。

set@sql='

select *

from #student

pivot(sum(stuscore) for [stuname] in('+

@stuname+'

)) as t

'--步驟3.執行指令碼

exec(@sql)

SQL server 行轉列 列轉行

1.簡單案例 create table student sid int primary key identity 1,1 主鍵自增 sname varchar 20 學生姓名 select from student create table class cid int primary key ide...

行轉列 列轉行

行轉列 select t.t.rowid from test1 t id c1 c2 c3 1 小紅 數學 10 2 小紅 語文 20 3 小欄 數學 15 4 小欄 語文 25 test1 oracle select c1,to char wm concat c2 c2 from test1 gr...

Sql server 中將資料行轉列列轉行(二)

第一步 建立臨時表結構 create table student 建立臨時表 stuname nvarchar 20 學生名稱 chinese int,math int,english int drop table student 刪除臨時表 select from student 查詢所有資料 i...