我真的需要你的帮助来完成在运行PIVOT命令(交叉表查询)后向我的表添加一个单独的新行。
我的目标是计算每个[请求类型]的列总数,并将列的总和插入到表格底部的新行中。
这对我来说似乎是火箭科学,超出了我对SQL语言/领域的能力和知识。
这是我表格中数据的快速截图:
以下是运行TableA的CrossTab查询后从表中捕获的数据的快速屏幕截图
TRANSFORM Count([Division]) AS CountOfDivision
SELECT [Branch], [Division]
FROM TableA
GROUP BY [Branch], [Division]
PIVOT [Request Type]
以下是我想要完成的预期结果/预期结果:
答案 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代码需要使用CASE
或SWITCH
函数