Ms access 如何在Access 2013中创建多值交叉表查询?
我的问题 我在Access 2013工作。我有一组数据需要根据两个字段进行分解,最好使用交叉表查询。我的问题是,我需要显示每个“值”[Amt Total]字段的总和和计数,不幸的是Access还不允许多值交叉表查询 出于参考目的,如果有人在线搜索时出现类似问题-如果您尝试在Access中添加多个“值”字段,则会导致错误: 要创建交叉表查询,必须指定一行或多行 标题选项、一列标题选项和一个值选项 故障排除 我读过很多关于如何做到这一点的文章,包括,但没有一篇有效 现在我有两个功能交叉表查询。。。按日期、状态返回计数的函数;以及按日期和状态返回总和的函数。我还没有找到将计数和总和合并到一个表中的方法。在这一点上,我不在乎它是通过查询还是通过报告完成的,但我认为查询是最简单的方法 我的“状态”比下面所示的要多很多,但为了了解我的数据,这里有一个来自条件聚合解决方案的剪报:Ms access 如何在Access 2013中创建多值交叉表查询?,ms-access,join,pivot,union,crosstab,Ms Access,Join,Pivot,Union,Crosstab,我的问题 我在Access 2013工作。我有一组数据需要根据两个字段进行分解,最好使用交叉表查询。我的问题是,我需要显示每个“值”[Amt Total]字段的总和和计数,不幸的是Access还不允许多值交叉表查询 出于参考目的,如果有人在线搜索时出现类似问题-如果您尝试在Access中添加多个“值”字段,则会导致错误: 要创建交叉表查询,必须指定一行或多行 标题选项、一列标题选项和一个值选项 故障排除 我读过很多关于如何做到这一点的文章,包括,但没有一篇有效 现在我有两个功能交叉表查询。。。按
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列=按月计算的[金额合计]字段的合计。最后,在交叉表数据透视功能出现的地方,第4-x列=每月[状态x、状态Y…和状态Z]的记录数;x-y列=按月记录[状态x、状态y…和状态Z]的总和
如果您能在单个查询表中获得SUM和COUNT pivot值,我们将不胜感激
示例数据
交叉表金额查询结果
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
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
交叉表数量查询结果
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
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
我的目标是简单地合并两个表。。。将“服务月份”保留在最左边的列中,然后只保留数量、拒绝数量、未结数量和已支付数量列,其中总费用、拒绝金额、未结金额、已支付金额列均基于服务月份
我的SQL
交叉表金额查询
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;
交叉表数量查询
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;
由于交叉表查询是单独工作的,所以只需在最后的select中组合它们。根据您的数据,您可能会遇到一个障碍,即交叉表中的列有时会丢失,从而很难在这些列上写入select。一个简单的答案是使用union将一些存根行合并到提供交叉表的数据中,以确保它们始终具有所有列。答案是使用类似于我在其他地方读到的内容的内部联接。然而,对于那些不懂SQL或无法理解SQL的人来说,我从头开始编写了自己的SQL查询,并且运行正常 这里是一个通用查询,供所有偶然发现类似问题的人使用。只需复制下面的代码,就可以替换以下变量。。。你应该可以从那里扩展 变数 SQL视图查询
谢谢您的回复@elc。不幸的是,我看到了联合&结合两个交叉表的简单查询是一种选择——但我不知道如何做到这一点。任何细节都将不胜感激。当尝试创建一个简单的结合这两者的查询时,我得到一个错误:您选择了向导无法连接的记录源中的字段。您可能已经从表和基于该表的查询中选择了字段。如果是这样的话,试着只从表或查询中选择字段。这个错误听起来像是在一个向导中,我想不出哪个向导能胜任如此复杂的任务。我知道您已经不再关心了,但对于后代来说,您需要确保在两个交叉表中都有一个字段,作为唯一的行标识符将它们连接在一起,并连接到任何其他感兴趣的数据。在你的情况下,看起来是[服务月]-哦,我看你明白了。是的,你的答案正是我想告诉你的: