2013-08-14 4 views
1

В unpivoting операции я хотел бы следующее:Как использовать псевдоним таблицы с заявлением Союза в Access?

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.

+0

Это не так, как профсоюзы работают, к сожалению. Я предполагаю, что вы ограничены одним запросом (а не с возможностью выводить несколько операторов SQL), так что вы можете просто вывести '[complex join/where clause]' во всех объединениях, а не только в первую очередь? –

+0

'[complex join/where clause]' занимает много времени, поэтому в идеале я бы хотел избежать повторной оценки '[complex joins/where clause]' – mchen

ответ

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 

 Смежные вопросы

  • Нет связанных вопросов^_^