0

我正在尝试编写一个将转换平面表的 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

等等等等。

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

提前致谢!

4

1 回答 1

0

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 粘贴到查询中

于 2016-05-19T22:19:43.130 回答