1

在此处访问 2010。我有一个疑问(谢谢 Andomar!):

SELECT Inspection.Date, count(*) AS [# Insp], sum(iif(Disposition = 'PASS',1,0)) AS [# Passed], sum(iif(Disposition = 'FAIL',1,0)) AS [# Failed], sum(iif(Disposition = 'PASS',1,0)) /  count(*) AS [% Acceptance]
FROM Inspection
WHERE Disposition in ('PASS', 'FAIL') AND ((Inspection.Date) Between Date() And Date()-30)
GROUP BY Date;

这给出了一个这样的表:

Date       | # Insp | # Passed | # Failed | % Acceptance
11/26/2012 | 7      | 5        | 2        | 71 
11/27/2012 | 8      | 4        | 4        | 50 
...

我希望使用此查询为图表下方的子表单制作“表格”,仅供参考。“表格”的格式很重要,因为它需要列(日期)和行标题。括号里有表格,强调表格是实时生成的;换句话说,不存储为 Access 对象。

最终结果将是这样的:

Date         | 11/26/2012 | 11/27/2012 ...
# Insp       | 7          | 8
# Passed     | 5          | 4
# Failed     | 2          | 4
% Acceptance | 71         | 50

这似乎是一个最佳情况,因为轴刚刚翻转,但对于我的生活,我找不到不破坏数据的解决方案。交叉表查询仅让我针对单个值过滤一个或多个类别。这是一个工会的用途吗?还是一个支点?需要转型吗?看起来应该是这么简单的问题。这是可以在 SQL 中完成的事情,还是需要 VBA 来安排“表格”?谢谢您的帮助!

这些链接似乎确实适用:

MS Access 中的列到行

如何将行转为列

4

1 回答 1

0

这必须是一个两步转换的过程。首先,您必须将当前查询中的数据旋转为行而不是列,然后您必须将日期转换为列而不是行。

查询将是这样的:

TRANSFORM max(val) as MaxValue
SELECT col
FROM
(
  SELECT [Date], '# Insp' as Col, [# Insp] as  val 
  FROM yourQuery
  UNION ALL
  SELECT [Date], '# Passed' as Col, [# Passed] as val
  FROM yourQuery
  UNION ALL
  SELECT [Date], '# Failed' as Col, [# Failed] as val
  FROM yourQuery
  UNION ALL
  SELECT [Date], '% Acceptance' as Col, [% Acceptance] as val
  FROM yourQuery
) 
GROUP BY col
PIVOT [Date]

我猜您当前的查询已保存在您的数据库中,您将yourQuery在我的示例中将 替换为您的查询名称。

我刚刚在 MS Access 2003 中使用您上面示例中的值对此进行了测试,它产生了您想要的结果。

于 2013-01-04T21:03:57.500 回答