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

请问一个sql查询有关问题,各位大牛请帮忙!解决立马给分

2013-03-28 
请教一个sql查询问题,各位大牛请帮忙!解决立马给分本帖最后由 ccy20662 于 2013-03-23 11:40:23 编辑假如

请教一个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
[解决办法]

CREATETABLE 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

*/

[解决办法]
老问题了:行列转换

2000的时候用case 


2005/2008可以用新语法pivot

热点排行