读书人

一个行列转换有关问题

发布时间: 2013-01-07 10:02:24 作者: rapoo

请教大家一个行列转换问题,急.......
一个行列转换有关问题,

想问一下 怎么样将 filedCourseName 列转换成列 不同数据有50多个
并且 根据查询条件不同 进行不同的转换
比如 只查询计算机专业的 那么就只将计算机的 不同的数据 转换成列
如果查询所有的专业 那就将所有的不同课程转换成列

请教一下大家该怎么做啊 很急....
[解决办法]
我想可以以下几步

一步 检索 要转换成 列的 字段

然后 拼成SQL语句

最后 动态执行 EXEC 就可以了
[解决办法]
先用个cte搭配where条件,筛选出你要转换的数据,再转换咯,你应该不会不懂得怎么写行转列吧?
[解决办法]
这个我觉得使用动态SQL比较好,具体的事例如下



create table test(
name varchar(20)
,class varchar(20)
,score numeric(6,2)

)
go
insert into test
values('张三','计算机基础',80)
,('张三','计算机应用',81.5)
,('张三','计算机组装',90)
,('张三','计算机开发',100)
,('李四','游戏机基础',50)
,('李四','游戏机应用',70)
,('李四','游戏机组装',73.5)
,('王五','游戏机开发',85)
,('王五','计算机基础',80)
,('王五','游戏机基础',80)

go
declare @SQL varchar(max)
set @SQL = ''
select @SQL= 'max(case class when '''+(select distinct class +''' then score else null end ) as '+ class +',max(case class when ''' from test as a for xml path (''))
select @SQL =LEFT(@SQL,LEN(@SQL)-LEN(',max(case class when '''))

set @SQL =
'select name
,'+@SQL+'
from test
group by name'

exec(@SQL)



[解决办法]
pivot
http://book.51cto.com/art/201002/183912.htm
[解决办法]
select filedStudentNumber,filedName,filedSpecialityName,filedClassName
max(case filedCourseName when '算基' then filedScore else null end)算基,
max(case filedCourseName when '算' then filedScore else null end)算,
max(case filedCourseName when '算' then filedScore else null end)算,
max(case filedCourseName when '算用' then filedScore else null end)算用,
from table
group by filedStudentNumber,filedName,filedSpecialityName,filedClassName

读书人网 >SQL Server

热点推荐