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 代码需要使用 SWITCH
或 IIF
函数来代替
我真的需要你的帮助来完成在 运行 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 代码需要使用 SWITCH
或 IIF
函数来代替