请教一个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
*/
2005/2008可以用新语法pivot