Sql Server 2000 行转列 的实现

use tempdb;
go

--科目表
if object_id('dbo.subject') is not null
 drop table dbo.subject;
go

create table subject(sid int identity(1,1)  not null primary key  ,sname varchar(1000));
go

--学生表

if object_id('dbo.student') is not null
 drop table dbo.student
go
create table dbo.student(stuid char(10) not null primary key, studname varchar(50))
go

if object_id('dbo.score') is not null
 drop table dbo.score
go
create table dbo.score(stuid char(10) not null,sid int not null,
score int not null,
constraint pk_score(stuid,sid));

insert into subject(sname) values('语文');
insert into subject(sname) values('数学');
insert into subject(sname) values('英语');

DECLARE @strSQL VARCHAR(8000)

SET @strSQL = 'SELECT t.STUNAME [姓名]'

SELECT @strSQL = @strSQL + ',SUM(CASE s.SNAME WHEN ''' + SNAME + ''' THEN g.[Score] END) [' + SNAME + ']'
FROM (SELECT SNAME FROM [Subject]) AS tmp

SELECT @strSQL = @strSQL + ' FROM [Score] g,[Subject] s, [Student] t WHERE g.SID=s.SID AND g.STUID = t.STUID  GROUP BY t.STUID, t.STUNAME'

declare @strsql  varchar(100)

posted on 2011-07-13 10:14 天空-天空 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/goodheaven/archive/2011/07/13/2104965.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值