日期:2014-05-17  浏览次数:20391 次

请教一个sql查询问题,各位大牛请帮忙!解决立马给分
本帖最后由 ccy20662 于 2013-03-23 11:40:23 编辑
假如有个Table1的表中列值如下:
名字  课程   年级  成绩
A     语文    1     75
A     语文    2     80
A     语文    3     83
A     数学    4     87
A     数学    5     90
A     数学    6     93
....

假如我想查询的结果类似如下:
名字  1年级语文的成绩  3年级语文的成绩   5年级数学的成绩   6年级数学的成绩
A              75                        83                          90                             93

SQL语句我该怎么写?本人是新手刚学习,请大家多指教,谢谢!


sql

------解决方案--------------------
CREATE	TABLE testTT(名字 varchar(20),  课程 VARCHAR(20),  年级 int,  成绩 int)
insert testtt select 'A'     ,'语文',    1,     75
union all select 'A'     ,'语文',    2,     80
union all select 'A'     ,'语文',    3,     83
union all select 'A'     ,'数学',    4,     87
union all select 'A'     ,'数学',    5,     90
union all select 'A'     ,'数学',    6,     93

DECLARE @sqlT VARCHAR(1000)

SELECT @sqlT=ISNULL(@sqlT+',','')+' MAX(CASE WHEN 年级 ='+ltrim(年级)+' and 课程='''+课程+''' then 成绩 else 0 end ) ['+ ltrim(年级)+'年级'+课程+'的成绩]'
FROM testtt 
WHERE 课程='语文' and 年级 in(1,3) or 课程='数学' and 年级 in(5,6)
GROUP BY 年级,课程

EXEC('SELECT 名字,'+@sqlt+' FROM testtt group by 名字')

--result
/*名字                   1年级语文的成绩    3年级语文的成绩    5年级数学的成绩    6年级数学的成绩    
-------------------- ----------- ----------- ----------- ----------- 
A                    75          83          90          93

*/

------解决方案--------------------
老问题