Access 2016:在反向交叉表查询中删除重复代码

Posted

技术标签:

【中文标题】Access 2016:在反向交叉表查询中删除重复代码【英文标题】:Access 2016: Deduplicating code in a reverse crosstab query 【发布时间】:2016-05-19 20:37:12 【问题描述】:

我正在尝试编写将转换平面表的 Access 2016 查询

ID |Date |Site Name | Alexandrium | Ceratium | etc etc

...进入多行表:

ID |Date |Site Name | Species | Num

我已经能够做到这一点,但是查询非常长:每个物种都有 20 个值/列,我必须为每个物种名称写出一个 UNION 查询:

    SELECT ID, Date, [Site Name], "Alexandrium" as Species, Alexandrium as Num
        FROM DatabaseName
    UNION ALL
    SELECT ID, Date, [Site Name], "Ceratium" as Species, Ceratium as Num
        FROM DatabaseName
    UNION ALL

等等等等。

有没有更好的方法来做到这一点,可以为查询提供一个列名列表,然后它会遍历它们、执行查询并将它们全部联合起来?

提前致谢!

【问题讨论】:

您可能需要提供源数据的样本,这样我们可能会想到如何从这里到达那里。 【参考方案1】:

Access 没有像 SQL Server 那样简单的反透视方法。

如果您有名称列表并且不想写出 SQL,您可以将其输入到查询中,如下所示:

SELECT "SELECT ID, Date, [Site Name], '" & [SpeciesName]
& "' as Species, " & [SpeciesName] & " as Num FROM DatabaseName UNION " AS Expr1
FROM Species

然后复制结果,删除最后一个 UNION 并将 SQL 粘贴到查询中

【讨论】:

以上是关于Access 2016:在反向交叉表查询中删除重复代码的主要内容,如果未能解决你的问题,请参考以下文章

数据表视图中的 MS Access 表单交叉表查询

基于包含子查询的查询的 ms-access 交叉表查询

Microsoft Access 交叉表查询中显示的多个客户 ID 的计数

从 MS Access 中将交叉表查询结果导出到 Excel

Access 2010 SQL--在交叉表查询中按聚合函数对行进行排序

SQLServer中的交叉查询