为列总计添加新的 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
最后,您需要添加一些逻辑来将总计行排序到底部。
考虑两个聚合查询的并集 - 一个在 Branch 和 Division 级别分组,另一个没有任何分组用于完整 总计。 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;
我真的需要你的帮助,因为这个问题超出了我的知识水平,因为它涉及 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
最后,您需要添加一些逻辑来将总计行排序到底部。
考虑两个聚合查询的并集 - 一个在 Branch 和 Division 级别分组,另一个没有任何分组用于完整 总计。 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;