按月度 分列 对同类科目汇总统计数据。请高人指点
按月份 分列 对同类科目汇总统计数据。请高人指点!

最后统计的结果要求如下:
scode sname 201401 201402 201403 201404 ...........
500101 直接材料 100.00 10000.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
请高人指点!
最好能按月份变动
或月份固定不变各一份指引。
------解决思路----------------------
最后统计的结果要求如下:
scode sname 201401 201402 201403 201404 ...........
500101 直接材料 100.00 10000.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已处理
@StartDate char(20),
@EndDate char(20)
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX)
SET @SQL='SELECT SCode,SName'
SELECT @SQL=@SQL+',SUM(CASE WHEN YSMonth='''+YSMonth+'''THEN price END)['+YSMonth+']'
FROM(
SELECT CONVERT(VARCHAR(6),DATEADD(MONTH,number,RTRIM(@StartDate)+'01'),112)YSMonth
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