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

时间:2016-06-22 17:09:00

标签: sql database ms-access rows transpose

我真的需要你的帮助,因为这个问题是在我的知识水平之上,因为它涉及SQL世界。

我想修改和格式化我现有的SQL Crosstab查询,这样我就可以添加一个新的表行,它允许每个列总数的总和(这将产生结果)下图标题为“CROSSTAB TABLE A w / TOTALS”)

CROSSTAB - 表A是以下当前SQL查询的产品(从表A处理数据)

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

enter image description here

使用MS Access / ADO Jet 4.0运行,它将从顶层表中获取数据(这是MDB文件中当前数据结构的一个工作示例),并在下面描述的第二个表中生成结果度量表因此,将[请求类型]列转换为行标题和计数,然后按部门排序。

这对我来说似乎是高级SQL代数,远远超出了我的SQL知识/编程水平。

3 个答案:

答案 0 :(得分:1)

在SQL中你会用CUBE / ROLLUP等做一些有趣的东西。但是我不知道在ms-access中可以访问什么或者什么不可访问。我要做的是建立2-3个视图。 1提供您的Cross表。 1得到所有总计和1所有联合所有查询1& 2.您当然可以将所有这些组合到一个查询中,但我发现在访问中有时会遇到挑战。

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

答案 1 :(得分:0)

我在这里建立了@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

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

答案 2 :(得分:0)

考虑两个聚合查询的并集 - 在 Branch Division 级别的组,另一个没有完整 Total 的任何分组。 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;