首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个行列转换有关问题,

2013-01-07 
请教大家一个行列转换问题,急.......想问一下 怎么样将 filedCourseName 列转换成列 不同数据有50多个 并

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

想问一下 怎么样将 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

热点排行