读书人

请问一个sql查询有关问题各位大牛请

发布时间: 2013-03-28 10:20:24 作者: rapoo

请教一个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

读书人网 >SQL Server

热点推荐