为列总计添加新的 table 行的 SQL 代码是什么

What would be the SQL code to add a new table row for column totals

我真的需要你的帮助,因为这个问题超出了我的知识水平,因为它涉及 SQL 世界。

我想修改和格式化我现有的 SQL 交叉表查询,这样我就可以添加一个新的 table 行,该行允许每个列总计(将产生下图中标题为 "CROSSTAB TABLE A w/ TOTALS")

的结果

CROSSTAB - TABLE A 是以下当前 SQL 查询的产物(数据来自 Table A)

TRANSFORM Count(TableA.[Division]) AS CountOfDivision
SELECT TableA.[Branch], TableA.Division
FROM TableA
GROUP BY TableA.[Branch], TableA.Division
PIVOT TableA.[RequestType];

运行 使用 MS Access/ADO Jet 4.0 从顶部获取数据 table(这是 MDB 文件中当前数据结构的工作示例)并在下面描述的第二个 table 中生成结果指标 table,从而将 [Request Type] 列转换为行 Headers 和计数,然后按部门排序。

这对我来说似乎是高级 SQL 代数,远远超出了我 SQL knowledge/programming.

的水平

在 SQL 中,您可以使用 CUBE/ROLLUPs 等做一些有趣的事情。但我不知道在 ms-access 中可以访问什么或不能访问什么。我要做的是构建 2-3 个视图。 1 提供您的十字架 table。 1 获取所有总计和 1 联合所有查询 1 和 2。您当然可以将所有这些组合到一个查询中,但我发现访问有时可能具有挑战性。

如果这是用于报告或 Excel,则报告或 Excel 将是创建总计行的合适位置。

我在这里以@Matt 的回答为基础。我会将交叉表基于联合查询:

SELECT Branch, Division, RequestType, 1 AS CountOfDivision
FROM TableA

UNION

SELECT 'Total' AS Branch, NULL AS Division, RequestType, 
    Sum(1) AS CountOfDivision
FROM TableA
GROUP BY RequestType

那么你可以这样做:

TRANSFORM Sum(CountOfDivision) AS Counts
SELECT Branch, Division
FROM MyUnionQuery
GROUP BY Branch, Division
PIVOT RequestType

最后,您需要添加一些逻辑来将总计行排序到底部。

考虑两个聚合查询的并集 - 一个在 BranchDivision 级别分组,另一个没有任何分组用于完整 总计。 MS Access 的交叉表查询实际上可以重写为条件聚合(大多数 RDMS 中常用的转换方式)。这当然是假设,旋转的列不是太多以至于脚本不可行:

SELECT TableA.[Branch], TableA.Division, 
       SUM(IIF(TableA.Division='Report', 1, 0)) As [Report],
       SUM(IIF(TableA.Division='Financial Analysis', 1, 0)) As [Financial Analsyis],
       SUM(IIF(TableA.Division='Research Paper', 1, 0)) As [Research Paper]
FROM TableA
GROUP BY TableA.[Branch], TableA.Division;

UNION

SELECT 'Total' As Branch, '' As Division,
       SUM(IIF(TableA.Division='Report', 1, 0)) As [Report],
       SUM(IIF(TableA.Division='Financial Analysis', 1, 0)) As [Financial Analsyis],
       SUM(IIF(TableA.Division='Research Paper', 1, 0)) As [Research Paper]
FROM TableA;