- 爱易网页
-
MSSQL教程
- 急SUM的应用解决思路
日期:2014-05-18 浏览次数:20444 次
急SUM的应用
急SUM的应用,有如下表,字段
NO DATE NAME NUM
1 2006/01/02 铅笔 5
2 2006/01/05 鉛笔 3
3 2006/02/01 笔记本 1
4 2006/02/06 笔记本 2
5 2006/01/06 小刀 5
6 2006/02/08 铅笔 6
现要写个sql统计出如下资料,想了很久,不知道这个SUM该怎么写,NO的号不同,物品一样,怎么统计,又要安月输出
NAME 1月量 2月量 ---------12月量
铅笔 8 6 --- 0
笔记本 0 3 --- 0
小刀 0 0 ----- 0
------解决方案--------------------
-- 简单点的,用枚举
CREATE TABLE TEST([NO] INT IDENTITY(1,1),[DATE] DATETIME,[NAME] NVARCHAR(20),[NUM] INT)
INSERT TEST([DATE],[NAME],[NUM]) SELECT '2006/01/02 ' , '铅笔 ', 5
INSERT TEST([DATE],[NAME],[NUM]) SELECT '2006/01/05 ' , '鉛笔 ', 3
INSERT TEST([DATE],[NAME],[NUM]) SELECT '2006/02/01 ' , '笔记本 ', 1
INSERT TEST([DATE],[NAME],[NUM]) SELECT '2006/02/06 ' , '笔记本 ', 2
INSERT TEST([DATE],[NAME],[NUM]) SELECT '2006/01/06 ' , '小刀 ', 5
INSERT TEST([DATE],[NAME],[NUM]) SELECT '2006/02/08 ' , '铅笔 ', 6
--SELECT * FROM TEST
GO
CREATE PROC PS_TEST(@YEAR NCHAR(4))
AS
BEGIN
SET NOCOUNT ON
DECLARE @START_DATE DATETIME,@END_DATE DATETIME
SELECT @START_DATE=CAST(@YEAR+ '-01-01 ' AS DATETIME),@END_DATE=CAST(@YEAR+ '-12-31 ' AS DATETIME)
SELECT
[NAME],
[1月量]=SUM(CASE WHEN MONTH([DATE])=1 THEN [NUM] ELSE 0 END),
[2月量]=SUM(CASE WHEN MONTH([DATE])=2 THEN [NUM] ELSE 0 END),
[3月量]=SUM(CASE WHEN MONTH([DATE])=3 THEN [NUM] ELSE 0 END),
[4月量]=SUM(CASE WHEN MONTH([DATE])=4 THEN [NUM] ELSE 0 END),
[5月量]=SUM(CASE WHEN MONTH([DATE])=5 THEN [NUM] ELSE 0 END),
[6月量]=SUM(CASE WHEN MONTH([DATE])=6 THEN [NUM] ELSE 0 END),
[7月量]=SUM(CASE WHEN MONTH([DATE])=7 THEN [NUM] ELSE 0 END),
[8月量]=SUM(CASE WHEN MONTH([DATE])=8 THEN [NUM] ELSE 0 END),
[9月量]=SUM(CASE WHEN MONTH([DATE])=9 THEN [NUM] ELSE 0 END),
[10月量]=SUM(CASE WHEN MONTH([DATE])=10 THEN [NUM] ELSE 0 END),
[11月量]=SUM(CASE WHEN MONTH([DATE])=11 THEN [NUM] ELSE 0 END),
[12月量]=SUM(CASE WHEN MONTH([DATE])=12 THEN [NUM] ELSE 0 END)
FROM TEST
WHERE [DATE]> =@START_DATE AND [DATE] <=@END_DATE
GROUP BY [NAME]