欢迎光临

木子屋

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

作者: dnawo

日期: 2010-05-28 03:19 PM

分类: 服务器

内容: 复制内容到剪贴板 程序代码--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)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.580 ms

返回

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

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.580 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.596 ms

返回