我的问题
我在Access 2013中工作。我有一组需要根据两个字段分解的数据(最好使用交叉表查询)。我的问题是,我需要显示每个'值'的SUM和COUNT。 ([Amt Total]字段) - 不幸的是Access尚未允许多值交叉表查询。
如果有人正在使用类似问题在线搜索,则会出现参考目的 - 如果您尝试添加多个' Value' Access中的字段:
要创建交叉表查询,您必须指定一个或多个Row 标题选项,一个列标题选项和一个值选项
疑难解答
我已经阅读了很多关于如何执行此操作的文章,包括UNIONs,JOINs和conditional aggregates - 但没有一篇有效。
此时我有两个FUNCTIONAL交叉表查询...一个按日期,按状态返回COUNT的查询;和按状态返回SUM的日期。我还没有找到一种方法将计数和总和合并到一个表中。此时我不在乎是否通过查询或报告完成 - 但我认为查询是最简单的方法。
我有更多的地位'比下面显示的那些,但是对于我的数据的想法,这里是条件聚合解决方案的剪辑:
SELECT Format([DOS],"yyyy-mm") AS [Month of Service],
Count(IIF(myStatus='OPEN', myStatus, Null)) As [Open Accts],
Sum(IIF(myStatus='OPEN', [Amt Total], Null)) As [Open Amt],
Count(IIF(myStatus='PAID', myStatus, Null)) As [Paid Accts],
Sum(IIF(myStatus='PAID', [Amt Total], Null)) As [Paid Amt]
FROM [myTable]
GROUP BY Format([DOS],"yyyy-mm")
我的目标
获取单个结果表。第1列=服务月份(该月内所有原始记录合计)。第2列=按月计算的总记录数。第3列=按月计算[Amt Total]字段的总和。最后(Crosstab枢轴功能进入的地方),列4-x =按状态显示[状态X,状态Y ...和状态Z]的记录数;和列x-y =按[月份] [状态X,状态Y ...和状态Z]的记录总和。
非常感谢在单个查询表中获取SUM和COUNT个透视值的任何帮助!
示例数据
CrossTab"金额"查询结果
Month of Service Gross Charges DENIED OPEN PAID
2011-12 $1,613.20 $1,613.20
2012-02 $999.00 $999.00
2012-05 $14,296.00 $14,296.00
2014-09 $37,776.00 $2,874.00 $8,925.50 $25,976.50
CrossTab"数量"查询结果
Month of Service Quantity DENIED OPEN PAID
2011-12 1 1
2012-02 1 1
2012-05 1 1
2014-09 21 1 2 18
我的目标是简单地合并两个表格......保持'服务月份'作为最左边的列,然后只有"数量","拒绝数量","打开数量"和"支付数量"带有" Gross Charges"," Denied Amt"," Open Amt"," Paid Amt"列全部基于服务月。
我的SQL
CrossTab" Amt"查询
TRANSFORM Sum([myTable].[Total]) AS [SumOfTotal]
SELECT Format([DOS],"yyyy-mm") AS [Month of Service], Sum([myTable].[Total]) AS [Gross Charges]
FROM [myTable]
GROUP BY Format([DOS],"yyyy-mm")
PIVOT [myTable].myStatus;
CrossTab"数量"查询
TRANSFORM Count([myTable].[Total]) AS [CountOfTotal]
SELECT Format([DOS],"yyyy-mm") AS [Month of Service], Count([myTable].[Total]) AS [Quantity]
FROM [myTable]
GROUP BY Format([DOS],"yyyy-mm")
PIVOT [myTable].myStatus;
答案 0 :(得分:2)
答案是使用内连接(类似于我在其他地方读过的内容)。但是,对于那些不了解SQL或者无法弄清楚的人 - 我从头开始编写自己的SQL查询。
这是一个 通用查询 ,适合所有遇到类似问题的人。只需复制下面的代码,替换以下变量......并且您应该可以从那里进行扩展!
<强>变量强>
[myCrossTabQueryCOUNT] = name of your COUNT crosstab query
[myCrossTabQuerySUM] = name of your SUM crosstab query
[Month of Service] = field name that is the primary ROW HEADING for each crosstab query
[mySum] = field name of your 'Value' field in the [myCrossTabQuerySUM] query (in my example it held a Sum value)
[myCount] = field name of your 'Value' field in the [myCrossTabQueryCOUNT] query (in my example it held a Count value)
SQL查看查询
SELECT [myCrossTabQueryCOUNT].[Month of Service], [myCrossTabQueryCOUNT].[myCount] AS [Count], [myCrossTabQuerySUM].[mySum] AS [Total Claim Charges]
FROM (([myCrossTabQueryCOUNT]
INNER JOIN [myCrossTabQuerySUM]
ON [myCrossTabQueryCOUNT].[Month of Service]=[myCrossTabQuerySUM].[Month of Service])
ORDER BY [myCrossTabQueryCOUNT].[Month of Service];
答案 1 :(得分:0)
由于交叉表查询单独工作,因此只需将它们组合在最后的选择中即可。根据您的数据,您可能会遇到交叉表中有时缺少列的问题,因此很难在其上编写选择。一个简单的答案是使用union将一些存根行合并到为交叉表提供的数据中,以确保它们始终具有所有列。