木子屋 Dnawo's BLOG

T-SQL同一列多行数据合并成一行

👤 dnawo 📅 2010-05-28 👁 8297 👍 0 💬 0 🔄 来源:本站原创
--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)

暂无评论。

计算题
评论需审核通过后显示
← 上一篇 电脑上所有程序打不开解决方法 下一篇 → SQL Server数据库开发的二十一条军规