在PIVOT之后在表格的底部插入/添加列总计(总和)

时间:2016-06-23 14:55:06

标签: sql database ms-access pivot crosstab

我真的需要你的帮助来完成在运行PIVOT命令(交叉表查询)后向我的表添加一个单独的新行。

我的目标是计算每个[请求类型]的列总数,并将列的总和插入到表格底部的新行中。

这对我来说似乎是火箭科学,超出了我对SQL语言/领域的能力和知识。

这是我表格中数据的快速截图:

enter image description here

以下是运行TableA的CrossTab查询后从表中捕获的数据的快速屏幕截图

TRANSFORM Count([Division]) AS CountOfDivision
SELECT [Branch], [Division]
FROM TableA
GROUP BY [Branch], [Division]
PIVOT [Request Type]

enter image description here

以下是我想要完成的预期结果/预期结果:

enter image description here

1 个答案:

答案 0 :(得分:0)

正如对原始帖子的评论中所述,我仅限于使用SQL Server而不是MS Access。但是,建议是在MS Access的查询中使用UNION语句 - 这个示例仍然提供了回答问题的有效方法。

要在所有单个记录下创建“总计”行,需要使用相同的SQL编写聚合查询(将聚合函数添加到要合计的列中)。

我在这里使用a...j语句使逻辑更容易消化,而不会增加交叉表和数据透视的复杂性。

CASE

此查询的结果如下所示:

SELECT   A.Branch
        ,A.Division
        ,CASE WHEN A.RequestType = 'Report' THEN 1 ELSE 0 END AS Report
        ,CASE WHEN A.RequestType = 'Financial Analysis' THEN 1 ELSE 0 END AS FinancialAnalysis
        ,CASE WHEN A.RequestType = 'Letter' THEN 1 ELSE 0 END AS Letter
        ,CASE WHEN A.RequestType = 'Research Paper' THEN 1 ELSE 0 END AS ResearchPaper
  FROM   TableA

UNION

SELECT   'TOTAL'
        ,NULL
        ,SUM(CASE WHEN A.RequestType = 'Report' THEN 1 ELSE 0 END) AS Report
        ,SUM(CASE WHEN A.RequestType = 'Financial Analysis' THEN 1 ELSE 0 END) AS FinancialAnalysis
        ,SUM(CASE WHEN A.RequestType = 'Letter' THEN 1 ELSE 0 END) AS Letter
        ,SUM(CASE WHEN A.RequestType = 'Research Paper' THEN 1 ELSE 0 END) AS ResearchPaper
  FROM   TableA

这可以通过将所有列表列形成第一个查询并再次查询它们,但也可以将它们添加起来。这只会产生一行 - 它会附加到第一个查询中。

使用MS Access时,除非您在VBA中对此逻辑进行编码,否则上面使用的Branch Division Report FinancialAnalysis Letter ResearchPaper ASFA ASFAA 1 0 0 0 ASFA ASFAB 1 0 0 0 ASFA ASFAD 0 0 0 1 ASFB ASFBE 0 0 1 0 ASFC ASFCC 0 1 0 0 TOTAL NULL 2 1 1 1 语句将无效,即使这样,语法也会有所不同。 MS访问中的SQL代码需要使用CASESWITCH函数