/*第一步:建立臨時表結構
*/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...