27,579
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE TEST
(
日期 SMALLDATETIME,
销售公司 CHAR (10),
产品名称 CHAR(10),
销售额 SMALLINT,
销售团队 CHAR(12)
)
INSERT TEST
SELECT '2011-02-01 ','北京公司','甲产品',1,'A团队' union all
SELECT '2011-02-01 ','北京公司','乙产品',2,'B团队' union all
SELECT '2011-02-01 ','上海公司','甲产品',3,'B团队' union all
SELECT '2011-02-01 ','上海公司','乙产品',4,'A团队' union all
SELECT '2011-02-02 ','北京公司','甲产品',5,'B团队' union all
SELECT '2011-02-02 ','北京公司','乙产品',6,'A团队' union all
SELECT '2011-02-02 ','上海公司','甲产品',7,'A团队' union all
SELECT '2011-02-03 ','北京公司','乙产品',8,'B团队' union all
SELECT '2011-02-03 ','上海公司','乙产品',9,'A团队' union all
SELECT '2011-02-03 ','上海公司','丙产品',10,'A团队'
GO
--SQL
DECLARE @date DATETIME
SET @date = '2011-02-03 00:00:00'
SELECT
销售公司 = (CASE WHEN GROUPING(销售公司) = 0 THEN 销售公司 ELSE '公司合计' END),
销售团队 = (CASE WHEN GROUPING(销售团队) = 0 THEN 销售团队 ELSE '团队合计' END),
产品名称 = (CASE WHEN GROUPING(产品名称) = 0 THEN 产品名称 WHEN GROUPING(销售公司) = 0 THEN '当日合计' ELSE '总合计' END),
销售额 = SUM(CASE WHEN 日期 = @date THEN 销售额 ELSE 0 END),
本日止累计 = SUM(销售额)
FROM Test a
WHERE 日期 <= @date
GROUP BY 销售公司, 销售团队 ,产品名称
WITH ROLLUP
--RESULT
/*
销售公司 销售团队 产品名称 销售额 本日止累计
北京公司 A团队 甲产品 0 1
北京公司 A团队 乙产品 0 6
北京公司 A团队 当日合计 0 7
北京公司 B团队 甲产品 0 5
北京公司 B团队 乙产品 8 10
北京公司 B团队 当日合计 8 15
北京公司 团队合计 当日合计 8 22
上海公司 A团队 丙产品 10 10
上海公司 A团队 甲产品 0 7
上海公司 A团队 乙产品 9 13
上海公司 A团队 当日合计 19 30
上海公司 B团队 甲产品 0 3
上海公司 B团队 当日合计 0 3
上海公司 团队合计 当日合计 19 33
公司合计 团队合计 总合计 27 55
*/
--#1. 学习一下ROLLUP
--#2. 学习一下GROUPING
--#3. 注意GROUP BY 销售公司, 销售团队 ,产品名称 字段的顺序对结果的影响