【问题标题】:Using A Crosstab On A Report在报表上使用交叉表
【发布时间】:2019-02-26 04:02:57
【问题描述】:

我有一个交叉表查询集来返回我数据库中每个配方的输入(见图)。我想知道如何使用固定列标题(准确地说是 15 个)设置我的交叉表查询,以便我可以在表单上使用此查询。我从位于HERE 的 fmsinc.com 找到了一些帮助。但是,我不知道如何更改 WHERE 子句的列标题,使其与我的 IN 子句匹配。当我在 SQL 中编写“IN (1,2,3)”时,列显示在结果列中,但没有值,因为 1 不等于“A455AJ”(如图所示)。

理想情况下,我希望获得有关如何 (1) 创建固定列和 (2) 将交叉表查询添加到报表的帮助/建议。我已经获得了THIS 链接,但我相信它假定读者已经知道如何在报表上显示交叉表查询,而我不知道。

【问题讨论】:

    标签: sql ms-access vba crosstab ms-access-2016


    【解决方案1】:

    只需将IN 子句更改为您的 列。链接的文章由于其特定数据而使用1,2,3...。因此,只需打开查询的 SQL 视图并添加所需的 15 个值。

    TRANSFORM ...
    SELECT ...
    FROM ...
    GROUP BY ...
    PIVOT ...
    IN ('A455AJ', 'A456AK', ...)
    

    请注意,这个IN() 子句既用作过滤器又用作列的顺序。项目可以引用或不引用。


    或者,如果您需要通过表单控件对列进行子集化,请在派生表子查询的WHERE 子句条件中使用IN - 允许在交叉表查询中使用。

    PARAMETERS [Forms]![frm_BulkComparison_Select]![Item 1] TEXT(255),
               [Forms]![frm_BulkComparison_Select]![Item 2] TEXT(255),
               ...;
    TRANSFORM ...
    SELECT ...
    FROM 
      (SELECT * FROM myTable
       WHERE col_item IN ([Forms]![frm_BulkComparison_Select]![Item 1], 
                          [Forms]![frm_BulkComparison_Select]![Item 2],
                          ...)
      ) As sub
    GROUP BY ...
    PIVOT ...
    

    【讨论】:

    • 当用户输入不同的配方(如“A064AL”)时,如何更改 IN 子句?我尝试了 IN ([Forms]![frm_BulkComparison_Select]![Item 1], etc...),但该字段只是被命名为该标签并且没有填充该值。
    • 这似乎与您的帖子不同。您将需要使用代码动态构建查询,例如在 VBA 中使用 QueryDefs
    • 虽然这不是我想要的答案,但 Parfait 确实回答了这个问题。我应该措辞更好。感谢您的协助。
    • 实际上@Lando,可能有一种方法可以在WHERE 子句中使用IN 而不是PIVOT 子句。请参阅扩展答案。请务必在TRANSFORM 上方添加PARAMETERS 子句(以分号结束)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多