急,高手进,关于月份横向统计的sql
新手,想起来有点乱,看明白的帮我理下,最好帮我写出来,因为周六要给人家汇报。
表
姓名 成绩 月份
小李 500 201206
小张 400 201206
小王 300 201206
小李 500 201206
小张 400 201204
小王 300 201204
小张 400 201205
小王 300 201205
....
想实现的结果
姓名 201204的成绩 201205的成绩 201206的成绩 ....后面可能还有很多月份的成绩
小李 0 0 1000 ...
小王 300 300 300 ...
小张 400 400 400 ...
现在我如果查询的是从201204到201205 的时间内结果,那就只有201204的成绩和201205成绩。如果我要查询的是从201204到201209,那就有201204的成绩........201209的成绩。
实现写动态查询的sql语句.
不知道我说行够不够清楚.晕啊.
[最优解释]
试试,表头你自己拼接
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT @s = @s + ',' + QUOTENAME([月份]) + '=max(case when [月份]='
+ QUOTENAME([月份], '''') + ' then isnull([成绩],0) else 0 end)'
FROM tb
GROUP BY [姓名]
EXEC('select [姓名]'+@s+' from tb group by [姓名]')
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT @s = @s + ',' + QUOTENAME([月份]) + '=max(case when [月份]='
+ QUOTENAME([月份], '''') + ' then isnull([成绩],0) else 0 end)'
FROM TB
WHERE 月份 BETWEEN @start END @end
GROUP BY [姓名]
EXEC('select [姓名]'+@s+' from tb group by [姓名]')