--create table
create table ##Course(cid int identity(1,1) primary key,cname nvarchar(20))
--insert
insert into ##Course(cname) values('语文')
insert into ##Course(cname) values('数学')
insert into ##Course(cname) values('英语')上面是课程表结构及数据,下边我们想看下总共有多少门课程,显示格式"课程1,课程2,...",脚本如下:
declare @stus nvarchar(200)
set @stus = '' --必须,否则print没有内容
select @stus = @stus + ',' + cname from ##Course
set @stus = substring(@stus,2,len(@stus)-1)
print @stus --语文,数学,英语在行转列中的应用
增加学生表及数据:
--create table
create table ##Student(sid int identity(1,1) primary key,sname nvarchar(50),cid int,score float)
--insert
insert into ##Student(sname,cid,score) values('张三',1,50)
insert into ##Student(sname,cid,score) values('张三',2,60)
insert into ##Student(sname,cid,score) values('张三',3,70)
insert into ##Student(sname,cid,score) values('李四',1,80)
insert into ##Student(sname,cid,score) values('李四',2,90)
insert into ##Student(sname,cid,score) values('李四',3,100)查询:
declare @sql nvarchar(500)
set @sql = 'select sname [学生]'
select @sql = @sql + ',max(case cid when ' + convert(varchar,cid) + ' then score else 0 end) [' + cname + ']' from ##Course
set @sql = @sql + ' from ##Student group by sname'
execute(@sql)结果:
学生 语文 数学 英语
李四 80 90 100
张三 50 60 70
参考文章
·SQL语句定义动态列头:http://www.cnblogs.com/ajunsoft/archive/2009/03/30/1425238.html
评论(0)
暂无评论。