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

最后统计的结果要求如下:
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
请高人指点!
按年份查询,按月份统计
或月份固定不变各一份指引。
------解决思路----------------------
这个只要稍微修改下就可以了,你试下
最后统计的结果要求如下:
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'