请教大家一个行列转换问题,急.......
想问一下 怎么样将 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)