2015-06-23 3 views
2

Я хочу использовать результат из подзапроса в качестве имени столбца другого запроса, так как столбцы изменения данных все время и подзапрос будет определять, в каком столбце хранятся текущие данные о кадре , Мой пример:Как использовать результат подзапроса в качестве имени столбца другого запроса

select item, 
     item_type 
     ... 
     forcast_0 * 0.9 as finalforcast 
     forcast_0 * 0.8 as newforcast 
from sales_data. 

но forcast_0 колонна является результатом (fore_column_name) подзапроса, результат может измениться на forcast_1 или forcast2

select 
    fore_column_name 
    from forecast_history 
    where ... 

Кроме того, колонна прогнозировалось будет используется несколько раз в первом запросе. как я мог это реализовать?

+0

вы можете создать представление подзапроса или использовать вспомогательный запрос как временную таблицу. – Tim3880

+0

Не могли бы вы разместить весь запрос, который вы используете? – user1578653

+0

@ user1578653, Привет, весь запрос очень длинный, извините, я не могу опубликовать их все здесь – TaroYuki

ответ

2

Используйте свой дополнительный запрос как встроенную таблицу. Что-то вроде ....

select item, 
     item_type, 
     .. 
     decode(fore_column_name, 'foo', 1, 2) * 0.9 as finalforcast, 
     decode(fore_column_name, 'foo', 1, 2) * 0.8 as newforcast 
    from sales_data, 
     (
      select fore_column_name 
      from forecast_history 
      where ... 
     ) inlineTable 

Я предполагаю, что здесь, что значение из подзапроса будет одинаковым для каждой строки - так быстро перекрестное соединение будет достаточно. Если значение будет меняться в зависимости от значений в каждой строке таблицы sales_data, то более подходящим будет другой тип соединения.

Быстрая ссылка на decode - если вы не знакомы с этим.

+0

Фактически я действительно хочу использовать возвращаемое значение вместо имени столбца. Но возвращаемое значение решит, какой столбец будет использоваться в первом запросе. – TaroYuki

+0

На самом деле вы, вероятно, можете использовать 'decode', см. Обновленный ответ .... – amcdermott

+0

он работает! Благодаря! – TaroYuki

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