日期:2014-05-19  浏览次数:20455 次

在线等:问一个gridview的问题
废话少说

DB中有一表为course,含三个字段:学号,课程名,分数
示例:
20032   CS   80
20032   IS   85
20032   C     70
20032   VB   70
20033   CS   80
20033   IS   75
.
.
.
想在前台以如下方式显示:
学号 CS分数 IS C VB
20032   80           85     70     70
....

不知道怎么处理,望各位帮小弟一下。在线等,解决马上结帖。

------解决方案--------------------
数据库设计好像不太合理
取出数据以后再转化好了
------解决方案--------------------
这个GridView可能无能为力
可以利用Sql语句进行列变行,尝试一下Sql语句

SELECT 学号
,sum(case 课程类型 when 'cs ' then 分数 else 0 end) as cs分数
,sum(case 课程类型 when 'is ' then 分数 else 0 end) as is分数
,sum(case 课程类型 when 'c ' then 分数 else 0 end) as cs分数
,sum(case 课程类型 when 'vb ' then 分数 else 0 end) as vb分数
FROM course
group by 学号
------解决方案--------------------
create table #
(
number nvarchar(20),
course nvarchar(20),
score int
)

insert into #
select '20032 ', 'CS ', 80 union all
select '20032 ', 'IS ', 85 union all
select '20032 ', 'C ', 70 union all
select '20032 ', 'VB ', 70 union all
select '20033 ', 'CS ', 80 union all
select '20033 ', 'IS ', 75


declare @sql varchar(8000)
set @sql = 'select number '

select @sql = @sql + ', sum(case course when ' ' ' + course + ' ' ' then score else 0 end) as ' ' ' + course + ' ' ' '
from (select distinct course from #) x

set @sql = @sql + ' from # group by number order by number '
exec (@sql)

drop table #