按年度为参数的存储过程查询,分月汇总统计费用,请高人指点

按年份为参数的存储过程查询,分月汇总统计费用,请高人指点
按年度为参数的存储过程查询,分月汇总统计费用,请高人指点
最后统计的结果要求如下:
scode      sname             01                        02                      03                      04       ........... 12       合计
500101 直接材料   100.00                       10000.00                                                                        10100.00
500102 直接人工   7436.00                     20000.00
500103 制造费用  1000.00                      30000.00
510101 劳保费           501.00                    40500.00
510102 招待费          11111.00                  55500.00


注:月份是变动的。

具体的表(totalprice)结构与字段如下:
SCode                char(20)
SName              char(50)
YSMonth            char(20)
Price                   float

SQL语句如下:
select t1.SCode,t1.SName,t1.YSMonth,t1.price from  totalprice  t1 where SCode is not null
order by t1.YSMonth,t1.SCode,t1.SName

请高人指点!
按年份查询,按月份统计
或月份固定不变各一份指引。 
------解决思路----------------------
这个只要稍微修改下就可以了,你试下
CREATE PROCEDURE P_Query201404
@Year VARCHAR(4)
AS
BEGIN
DECLARE @StartDate VARCHAR(6),@EndDate VARCHAR(6)
SET @StartDate=@Year+'01'
SET @EndDate=@Year+'12'
DECLARE @SQL NVARCHAR(MAX)
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+YSMonth+'''THEN price END)['+M+']'
FROM(
SELECT CONVERT(VARCHAR(6),DATEADD(MONTH,number,RTRIM(@StartDate)+'01'),112)YSMonth
,RIGHT(CONVERT(VARCHAR(6),DATEADD(MONTH,number,RTRIM(@StartDate)+'01'),112),2)M
FROM master..spt_values
WHERE type='P' AND number<=DATEDIFF(MONTH,RTRIM(@StartDate)+'01',RTRIM(@EndDate)+'01')
)T
SET @SQL=@SQL+',SUM([Price])[合计]'
SET @SQL=@SQL+'FROM[totalprice]
Where SCode is not null AND YSMonth BETWEEN'''+@StartDate+'''AND '''+@EndDate+'''
GROUP BY SCode,SName'
EXEC(@SQL)
END
GO
exec P_Query201404   '2014'