如何在Access中使用带有Union语句的表别名?

时间:2013-08-14 07:58:02

标签: sql ms-access union derived-table table-alias

在一个不透彻的操作中,我想要以下内容:

SELECT A, B, C FROM [complex joins/where clause] As DerivedTable
UNION
SELECT A, B, D FROM DerivedTable
UNION
SELECT A, B, E FROM DerivedTable
...

但它抱怨找不到DerivedTable(我使用派生表,因此不必一次又一次地评估[complex joins/where clause],从而减​​慢了事情。)

我知道我可以简单地创建一个名为DerivedTable的新查询来代表[complex joins/where clause],但

  • 以上SQL是从Excel传递的 - 在运行上述内容之前,我不必打开数据库来创建新的查询

  • [complex joins/where clause]是动态生成的,并且从用户更改为用户,其中两个可能同时运行上述SQL。

1 个答案:

答案 0 :(得分:1)

像这样的东西。使用CASE并将此表与(1,2,3,...)表联接。我不确定它是Access的正确语法,但它适用于大多数SQL方言。

SQLFiddle demo

SELECT A,B, 
       CASE WHEN CT.r=1 then C
            WHEN CT.r=2 then D
            WHEN CT.r=3 then E
       END

FROM [complex joins/where clause] As DerivedTable
CROSS JOIN (select 1 as r
            union all  
            select 2 as r
            union all  
            select 3 as r
           ) as CT
order by A,B