27,579
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE TEST
(
日期 SMALLDATETIME,
销售公司 CHAR (10),
产品名称 CHAR(10),
销售额 SMALLINT
)
INSERT TEST
SELECT '2011-02-01 ','北京公司','甲产品',1 union all
SELECT '2011-02-01 ','北京公司','乙产品',2 union all
SELECT '2011-02-01 ','上海公司','甲产品',3 union all
SELECT '2011-02-01 ','上海公司','乙产品',4 union all
SELECT '2011-02-02 ','北京公司','甲产品',5 union all
SELECT '2011-02-02 ','北京公司','乙产品',6 union all
SELECT '2011-02-02 ','上海公司','甲产品',7 union all
SELECT '2011-02-03 ','北京公司','乙产品',8 union all
SELECT '2011-02-03 ','上海公司','乙产品',9 union all
SELECT '2011-02-03 ','上海公司','丙产品',10
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 产品名称 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
/*
销售公司 产品名称 销售额 本日止累计
北京公司 甲产品 0 6
北京公司 乙产品 8 16
北京公司 当日合计 8 22
上海公司 丙产品 10 10
上海公司 甲产品 0 10
上海公司 乙产品 9 13
上海公司 当日合计 19 33
公司合计 总合计 27 55
*/
select 销售公司,产品名称,
销售额=(select sum(销售额) from Test where 销售公司=a.销售公司 and 产品名称=a.产品名称 and 日期='2011-02-03'),
本日止累计=(select sum(销售额) from Test where 销售公司=a.销售公司 and 产品名称=a.产品名称 and 日期<='2011-02-03') into #cte
from test a group by 销售公司,产品名称
select * from #cte
union all
select 销售公司,'当日合计' as 产品名称,sum(销售额) as 销售额,sum(本日止累计) as 本日止累计 from #cte group by 销售公司
union all
select 'zzzzzzz','总合计' as 产品名称,sum(销售额),sum(本日止累计) from #cte
order by 销售公司,产品名称 desc
select 销售公司,产品名称,
销售额=(select sum(销售额) from Test where 销售公司=a.销售公司 and 产品名称=a.产品名称 and 日期='2011-02-03'),
本日止累计=(select sum(销售额) from Test where 销售公司=a.销售公司 and 产品名称=a.产品名称 and 日期<='2011-02-03') into #cte
from test a group by 销售公司,产品名称
select * from #cte
union all
select 销售公司,'当日合计' as 产品名称,sum(销售额) as 销售额,sum(本日止累计) as 本日止累计 from #cte group by 销售公司
union all
select null,'总合计' as 产品名称,sum(销售额),sum(本日止累计) from #cte
order by 销售公司 desc,产品名称 desc