Ms access 如何在Access 2013中创建多值交叉表查询?

Ms access 如何在Access 2013中创建多值交叉表查询?,ms-access,join,pivot,union,crosstab,Ms Access,Join,Pivot,Union,Crosstab,我的问题 我在Access 2013工作。我有一组数据需要根据两个字段进行分解,最好使用交叉表查询。我的问题是,我需要显示每个“值”[Amt Total]字段的总和和计数,不幸的是Access还不允许多值交叉表查询 出于参考目的,如果有人在线搜索时出现类似问题-如果您尝试在Access中添加多个“值”字段,则会导致错误: 要创建交叉表查询,必须指定一行或多行 标题选项、一列标题选项和一个值选项 故障排除 我读过很多关于如何做到这一点的文章,包括,但没有一篇有效 现在我有两个功能交叉表查询。。。按

我的问题

我在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。不幸的是,我看到了联合&结合两个交叉表的简单查询是一种选择——但我不知道如何做到这一点。任何细节都将不胜感激。当尝试创建一个简单的结合这两者的查询时,我得到一个错误:您选择了向导无法连接的记录源中的字段。您可能已经从表和基于该表的查询中选择了字段。如果是这样的话,试着只从表或查询中选择字段。这个错误听起来像是在一个向导中,我想不出哪个向导能胜任如此复杂的任务。我知道您已经不再关心了,但对于后代来说,您需要确保在两个交叉表中都有一个字段,作为唯一的行标识符将它们连接在一起,并连接到任何其他感兴趣的数据。在你的情况下,看起来是[服务月]-哦,我看你明白了。是的,你的答案正是我想告诉你的: