SQL中WITH CUBE、WITH ROLLUP的用法:
①WITH CUBE:生成GROUP BY中字段所有可能组合的统计
②WITH ROLLUP:生成GROUP BY中字段类似于SUBTOTAL、TOTAL的统计
其中,通过GROUPING(列名)来区分数据时原有的还是增加的统计数据。
DECLARE @t TABLE
(
年份 SMALLINT,
月份 SMALLINT,
费用类别 NVARCHAR(50),
金额 DECIMAL(18,2)
)
INSERT @t
SELECT 2013,8,'制造费用',1000 UNION ALL
SELECT 2013,8,'制造费用',2000 UNION ALL
SELECT 2013,8,'管理费用',3000 UNION ALL
SELECT 2013,8,'管理费用',4000 UNION ALL
SELECT 2013,8,'销售费用',4500 UNION ALL
SELECT 2013,9,'制造费用',5000 UNION ALL
SELECT 2013,9,'制造费用',6000 UNION ALL
SELECT 2013,9,'管理费用',7000 UNION ALL
SELECT 2013,9,'管理费用',7500 UNION ALL
SELECT 2013,9,'销售费用',8000 UNION ALL
SELECT 2013,9,'财务费用',9000
SELECT
t.年份,
t.月份,
t.费用类别,
SUM(t.金额) AS 金额
FROM @t t
GROUP BY
t.年份,
t.月份,
t.费用类别
WITH ROLLUP--生成GROUP BY中字段类似于SUBTOTAL、TOTAL的统计
SELECT
t.年份,
t.月份,
t.费用类别,
SUM(t.金额) AS 金额
FROM @t t
GROUP BY
t.年份,
t.月份,
t.费用类别
WITH CUBE--生成GROUP BY中字段所有可能组合的统计
WITH ROLLUP的结果
2013 8 管理费用 7000.00
2013 8 销售费用 4500.00
2013 8 制造费用 3000.00
2013 8 NULL 14500.00
2013 9 财务费用 9000.00
2013 9 管理费用 14500.00
2013 9 销售费用 8000.00
2013 9 制造费用 11000.00
2013 9 NULL 42500.00
2013 NULL NULL 57000.00
NULL NULL NULL 57000.00
WITH CUBE的结果
年份 月份 费用类别 金额
2013 9 财务费用 9000.00
NULL 9 财务费用 9000.00
NULL NULL 财务费用 9000.00
2013 8 管理费用 7000.00
NULL 8 管理费用 7000.00
2013 9 管理费用 14500.00
NULL 9 管理费用 14500.00
NULL NULL 管理费用 21500.00
2013 8 销售费用 4500.00
NULL 8 销售费用 4500.00
2013 9 销售费用 8000.00
NULL 9 销售费用 8000.00
NULL NULL 销售费用 12500.00
2013 8 制造费用 3000.00
NULL 8 制造费用 3000.00
2013 9 制造费用 11000.00
NULL 9 制造费用 11000.00
NULL NULL 制造费用 14000.00
NULL NULL NULL 57000.00
2013 NULL 财务费用 9000.00
2013 NULL 管理费用 21500.00
2013 NULL 销售费用 12500.00
2013 NULL 制造费用 14000.00
2013 NULL NULL 57000.00
2013 8 NULL 14500.00
NULL 8 NULL 14500.00
2013 9 NULL 42500.00
NULL 9 NULL 42500.00