Невозможно создать материализованное представление для запроса ниже - PullRequest
0 голосов
/ 01 января 2019

Надеюсь, у вас все хорошо.Я могу выполнить приведенный ниже код и получил правильный вывод в oracle. Но при попытке создать представление дает ошибку - столбец не может быть присоединен к подзапросу.Представление создается на сервере sql по тому же запросу, но в oracle выдает ошибку. Пожалуйста, помогите.

select c.Contractid
FROM    FCT_EIT_CONTRACT c LEFT OUTER JOIN
DIM_EIT_PROCESS_INSTANCE psi   ON psi.SURR_ID = c.PROCESS_INSTANCE_SKEY 
    LEFT OUTER JOIN                 
    DIM_EIT_ACTION wa               ON psi.ACTION_SKEY wa.SURR_ID 
    LEFT OUTER JOIN         
    DIM_EIT_ACTION_HISTORY  ah      ON wa.SURR_ID = ah.ACTION_SKEY 

    AND psi.SURR_ID = ah.PROCESS_INSTANCE_SKEY 
    AND ah.ACTION_HISTORY_ID =(SELECT  MAX(ACTION_HISTORY_ID) AS Expr1
   FROM  DIM_EIT_ACTION_HISTORY  a
   WHERE (PROCESS_INSTANCE_SKEY = c.PROCESS_INSTANCE_SKEY) 
   AND 
  (psi.ACTION_SKEY = ACTION_SKEY)))  
  LEFT OUTER JOIN
 DIM_EIT_STEP ws ON ws.SURR_ID = wa.NEXT_STEP_SKEY
 WHERE (psi.CurrentStepId NOT IN (100, 130, 131, 132, 900, 902, 910)) 

Ответы [ 2 ]

0 голосов
/ 02 января 2019
select 

c.contractid ОТ FCT_EIT_CONTRACT с, DIM_EIT_PROCESS_INSTANCE фунтов на квадратный дюйм, DIM_EIT_ACTION ва, DIM_EIT_ACTION_HISTORY ах, (выберите MAX (ACTION_HISTORY_ID) А.С. ACTION_HISTORY_ID, ACTION_SKEY, PROCESS_INSTANCE_SKEY из DIM_EIT_ACTION_HISTORY группы по ACTION_SKEY, PROCESS_INSTANCE_SKEY) а, где DIM_EIT_STEP Ws psi.SURR_ID(+) = c.PROCESS_INSTANCE_SKEY и psi.ACTION_SKEY = wa.SURR_ID (+) и wa.SURR_ID = ah.ACTION_SKEY (+) И psi.SURR_ID = ah.PROCESS_INSTANCE_SKEY (+) И ah.ACTION_HIST_ID_ID_HIST_ID) и ((a.ACTION_HISTORY_ID не является нулевым, а ah.ACTION_HISTORY_ID не является нулевым и ah.PROCESS_INSTANCE_SKEY не является нулевым) или (a.ACTION_HISTORY_ID является нулевым и ah.ACTION_HISTORY_ID является нулевым, а ah.PROCESS_INSTANCE_SKEY - null- и c.PROCESS_INSTANCE_SKEY = a.PROCESS_INSTANCE_SKEY (+) - и psi.ACTION_SKEY = a.ACTION_SKEY и ws.SURR_ID` +) = wa.NEXT_STEP_SKEY и (psi.CurrentStepId NOT IN (100, 130, 131, 131), 902, 910)) и сокращается в (1313,27, 221)

0 голосов
/ 01 января 2019

Помогло бы, если бы вы переместили некорректную часть запроса в предложение WHERE, например,

SELECT c.contractid
FROM fct_eit_contract c
LEFT OUTER JOIN dim_eit_process_instance psi ON psi.surr_id = c.process_instance_skey
LEFT OUTER JOIN dim_eit_action wa            ON psi.action_skey wa.surr_id
LEFT OUTER JOIN dim_eit_action_history ah    ON wa.surr_id = ah.action_skey
                                            AND psi.surr_id = ah.process_instance_skey
LEFT OUTER JOIN dim_eit_step ws              ON ws.surr_id = wa.next_step_skey
WHERE psi.currentstepid NOT IN (100, 130, 131, 132, 900, 902, 910)
  -- subquery moved down here
  AND  ah.action_history_id = (SELECT MAX(action_history_id) AS expr1
                               FROM dim_eit_action_history a
                               WHERE process_instance_skey = c.process_instance_skey
                                 AND psi.action_skey = action_skey
                              );
...