【问题标题】:Access Union/Pivot to Swap Columns and Rows访问联合/枢轴以交换列和行
【发布时间】:2013-01-04 20:46:42
【问题描述】:

在此处访问 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 来安排“表格”?感谢您的帮助!

这些链接似乎确实适用:

Columns to Rows in MS Access

how to pivot rows to columns

【问题讨论】:

    标签: sql ms-access pivot transform union


    【解决方案1】:

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

    查询将是这样的:

    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 中使用您上面示例中的值对此进行了测试,它产生了您想要的结果。

    【讨论】:

    • 绝对完美!唯一令人烦恼的是第一列的标题是“col”。这似乎是在您的代码中设置的,但是更改“col”的任何实例都会更改列内容。这是否需要在转换和旋转之后进一步分配?谢谢!谢谢!
    • @Phizon 只是UNION ALL 值的别名,您可以随意调用它。该列数据将成为最终结果中的第一列,它只是原始列的字符串名称。
    • 笨蛋,我只是在子表单中更改了它,“col”现在是“Date”,没有任何影响。再次感谢!
    • 是的,我现在明白了。一切都按预期工作!再次感谢蓝脚!周末愉快!
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多