Inserting/Adding PIVOT 后 table 底部的列总计(总和)

Inserting/Adding Column totals (sum) at the bottom of the table after a PIVOT

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

我的objective是统计每个[Request Types]的列总和,并将列的总和插入到我的table底部的新行中。

这对我来说就像火箭科学,超出了我的能力和知识 SQL language/realm。

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

这是在 运行 表 A

的交叉表查询之后从 table 捕获的数据的快速屏幕截图
TRANSFORM Count([Division]) AS CountOfDivision
SELECT [Branch], [Division]
FROM TableA
GROUP BY [Branch], [Division]
PIVOT [Request Type]

这是我想要完成的 result/expected 结果:

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

要在所有单个记录下方创建一个 "Total" 行,需要使用相同的 SQL 编写聚合查询(向要“合计”的列添加聚合函数).

我在这里使用 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

此查询的结果如下所示:

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 Access 时,我在上面使用的 CASE 语句将不起作用,除非您在 VBA 中编写此逻辑,即使这样语法也不同。 MS access 中的 SQL 代码需要使用 SWITCHIIF 函数来代替