我正在为业务报告构建 SQL 查询。我需要在报告中同时包含小计(按文件编号分组)和总计。
我正在进入未知的 SQL 领域,所以这是第一次尝试。我所做的查询几乎可以正常工作。唯一的问题是条目正在分组——我需要在报告中将它们分开。
这是我的示例数据:
文件编号 日期 费用 2009 年 12 月 3 日 5 月 10 日 2010 年 1 月 3 日 6 月 15 日 3B 2010 年 3 月 28 日 1 3 3B 2010 年 3 月 28 日 5 月 10 日
当我运行这个查询
SELECT
CASE
WHEN (GROUPING(FileNumber) = 1) THEN NULL
ELSE FileNumber
END AS FileNumber,
CASE
WHEN (GROUPING(Date) = 1) THEN NULL
ELSE Date
END AS Date,
SUM(Cost) AS Cost,
SUM(Charge) AS Charge
FROM SubtotalTesting
GROUP BY FileNumber, Date WITH ROLLUP
ORDER BY
(CASE WHEN FileNumber IS NULL THEN 1 ELSE 0 END), -- Put NULLs after data
FileNumber,
(CASE WHEN Date IS NULL THEN 1 ELSE 0 END), -- Put NULLs after data
Date
我得到以下信息:
文件编号 日期 费用 2009 年 12 月 3 日 5 月 10 日 2010 年 1 月 3 日 6 月 15 日 3 无 11 25 3B 2010 年 3 月 28 日 6 月 13 日 <-- 3B 空 6 13 无 无 17 38
我想要的是:
文件编号 日期 费用 2009 年 12 月 3 日 5 月 10 日 2010 年 1 月 3 日 6 月 15 日 3 无 11 25 3B 2010 年 3 月 28 日 1 3 <-- 3B 2010 年 3 月 28 日 5 月 10 日 <-- 3B 空 6 13 无 无 17 38
我可以清楚地看到为什么要对条目进行分组,但我不知道如何在返回小计和总计的同时将它们分开。
在执行这样的高级 SQL 查询时,我有点绿色,所以如果我使用错误的方法来解决问题WITH ROLLUP
,请提出一些首选的替代方案——你不必为我,我只是需要一些方向。谢谢!