1

在非透视操作中,我想要以下内容:

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。

4

1 回答 1

1

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

SQLFiddle 演示

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
于 2013-08-14T08:12:19.247 回答