sql后台的表格每行的数据如何调换?
1个回答
展开全部
--你说的是行转列
1.建表
create table 表
(
学号 varchar(10),
课程 varchar(10),
成绩 int
)
2.插入数据
insert into 表 values('0001','语文',90),('0001','数学',99),('0001','英语',66)
insert into 表 values('0002','语文',87),('0002','数学',85),('0002','英语',76)
insert into 表 values('0003','语文',77),('0003','数学',66),('0003','英语',98)
--3.1方法一(mssql2005+)
select * from 表
pivot
(
max(成绩)
for
课程 in(语文,数学,英语)
)p
--3.2方法二(通用)
select 学号,
max(case when 课程='语文' then 成绩 else null end) as 语文,
max(case when 课程='数学' then 成绩 else null end) as 数学,
max(case when 课程='英语' then 成绩 else null end) as 英语
from 表
Group by 学号
--3.3方法三(动态)
Declare @sql Varchar(8000)
declare @W VArchar(4000)=''
select @W=@W+','+ 课程 From (
Select distinct 课程 from 表) S
Set @sql='select * from 表
pivot
(
max(成绩)
for
课程 in('+STUFF(@W,1,1,'')+')
)p'
Exec (@sql)
--3.4方法四(老土)
create table #表(学号 varchar(10) )
insert into #表(学号)
select distinct 学号 from 表
Declare @课程 Varchar(10)
declare @sql varchar(1000)
DECLARE Cur CURSOR FOR
Select distinct 课程 From 表
OPEN Cur
FETCH NEXT FROM Cur INTO @课程
WHILE @@FETCH_STATUS = 0
BEGIN
Set @sql='alter table #表 add '+@课程+' int'
Exec (@sql)
Set @sql='Update #表 Set '+@课程+'=(select 成绩 from 表 where 学号=#表.学号 and 课程='''+@课程+''')'
Exec (@sql)
FETCH NEXT FROM Cur INTO @课程
End
CLOSE Cur
DEALLOCATE Cur
select * from #表
drop table #表
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询