sql后台的表格每行的数据如何调换?

 我来答
鲜美还清湛灬白桦N
2015-10-14 · TA获得超过621个赞
知道小有建树答主
回答量:404
采纳率:50%
帮助的人:528万
展开全部
--你说的是行转列
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 #表

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式