在这里访问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
...
我希望使用此查询为图表下方的子表单创建“表格”,仅供参考。 “表”的格式很重要,因为它需要Column(Date)和Row标题。我在parentheis中有一个表来强调该表是实时生成的;换句话说,不存储为Access对象。
最终结果将是这样的:
Date | 11/26/2012 | 11/27/2012 ...
# Insp | 7 | 8
# Passed | 5 | 4
# Failed | 2 | 4
% Acceptance | 71 | 50
这似乎是一个最佳情况,因为轴只是翻转,但对于我的生活,我找不到不破坏数据的解决方案。交叉表查询仅允许我针对单个值过滤一个或多个类别。这是联盟将用于什么的东西;还是一个支点?是否需要改造?看起来它应该是一个如此简单的问题。这可以在SQL中完成,还是需要VBA来安排“表”?谢谢你的帮助!
这些链接确实适用:
答案 0 :(得分: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中使用上面示例中的值对其进行了测试,并生成了您想要的结果。