2014-10-14 3 views
-1

На самом деле у меня есть Oracle 10 и MSSQL базы данных, где я использую этот запрос:Ошибка ссылка внутри Inner Регистрация

SELECT F1.ID_ACTIVO, F1.DENOMINACION, F1.IMPACTO_TOTAL, F1.RIESGO_TOTAL, AIRR.ID_RANGO, SUM(IMPACTORESIDUAL), SUM(RIESGORESIDUAL) 
FROM ( SELECT AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.DENOMINACION, SUM(AITA.IMPACTO_TOTAL) AS IMPACTO_TOTAL, SUM(AITA.RIESGO_TOTAL) AS RIESGO_TOTAL 
     FROM PROCESOS A 
     INNER JOIN AGR_ACTIVO AA ON (AA.ID_TIPOACTIVO = 2 AND AA.ID_ACTIVO = A.ID_PROCESO) 
     INNER JOIN AGR_IMP_TOTAL_ACT AITA ON (AA.ID_TIPOACTIVO = AITA.ID_TIPOACTIVO AND AA.ID_ACTIVO = AITA.ID_ACTIVO) 
     GROUP BY AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.DENOMINACION) F1 
INNER JOIN AGR_IMP_RISK_REAL AIRR ON (F1.ID_TIPOACTIVO = AIRR.ID_TIPOACTIVO AND F1.ID_ACTIVO = AIRR.ID_ACTIVO) 
GROUP BY F1.ID_ACTIVO, F1.DENOMINACION, F1.IMPACTO_TOTAL, F1.RIESGO_TOTAL, AIRR.ID_RANGO 
ORDER BY F1.RIESGO_TOTAL 
ASC,F1.ID_ACTIVO, F1.DENOMINACION, AIRR.ID_RANGO 

Это возвращает таблицу, как это:

|ID_ACTIVO | DENOMINACION   | IMPACTO_TOTAL | RIESGO_TOTAL | ID_RANGO | column6 | column7| 
|----------|------------------------|---------------|--------------|----------|---------|--------| 
| 20845 |Consultoría de Seguridad|  15375  | 2464,375 |  1 | 46125 |7393,125| 

Эта таблица представляет собой элементы с ID_TIPOACTIVO = 2. Теперь у меня есть больше элементов с ID_TIPOACTIVO со значениями от 1 до 14. Поэтому я создал следующий запрос, но не работает, моя проблема - это строка INNER JOIN AGR_IMP_RISK_REAL AIRR ON (COALESCE(F1.ID_TIPOACTIVO,F2.ID_TIPOACTIVO) = AIRR.ID_TIPOACTIVO AND COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO) = AIRR.ID_ACTIVO), а не ссылка F1.ID_TIPOACTIVO и F1.ID_ACTIVO из инструкции COALESCE() (я обозначил строку **). Как я могу решить эту проблему? (заботясь, потому что я должен добавить это после 14 подзапросов).

Это ошибка (в AquaData, используя базы данных из MSSQL):

[Ошибка] строки сценария: 1-19 -------------- ----------- El identificador formado por varias partes "F1.ID_TIPOACTIVO" no se pudo enlazar.

[Ошибка] Строки сценария: 1-19 ------------------------- El identificador formado por varias partes "F1.ID_TIPOACTIVO" no se pudo enlazar.

[Ошибка] Сценарии сценария: 1-19 ------------------------- El identificador formado por varias partes "F1.ID_ACTIVO" no se pudo enlazar.

[Ошибка] Сценарии сценария: 1-19 ------------------------- El identificador formado por varias partes "F1.ID_ACTIVO" no se pudo enlazar.

И это ошибка в Oracle:

[Error] Сценарий линии: 1-19 ----------------- -------- ОРА-00904: "F1" "ID_ACTIVO":. неверный идентификатор

Вот запрос:

SELECT COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO), COALESCE(F1.NOMBRE,F2.DENOMINACION), COALESCE(F1.IMPACTO_TOTAL,F2.IMPACTO_TOTAL), COALESCE(F1.RIESGO_TOTAL,F2.RIESGO_TOTAL), AIRR.ID_RANGO, SUM(IMPACTORESIDUAL), SUM(RIESGORESIDUAL) 
FROM 
//IF ID_TIPOACT=1 
( SELECT AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.NOMBRE, SUM(AITA.IMPACTO_TOTAL) AS IMPACTO_TOTAL, SUM(AITA.RIESGO_TOTAL) AS RIESGO_TOTAL 
      FROM PRODUCTOS A 
      INNER JOIN AGR_ACTIVO AA ON (AA.ID_TIPOACTIVO = 1 AND AA.ID_ACTIVO = A.ID_PRODUCTO) 
      INNER JOIN AGR_IMP_TOTAL_ACT AITA ON (AA.ID_TIPOACTIVO = AITA.ID_TIPOACTIVO AND AA.ID_ACTIVO = AITA.ID_ACTIVO) 
      GROUP BY AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.NOMBRE) F1 , 
//IF ID_TIPOACT=2 
     ( SELECT AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.DENOMINACION, SUM(AITA.IMPACTO_TOTAL) AS IMPACTO_TOTAL, SUM(AITA.RIESGO_TOTAL) AS RIESGO_TOTAL 
      FROM PROCESOS A 
      INNER JOIN AGR_ACTIVO AA ON (AA.ID_TIPOACTIVO = 2 AND AA.ID_ACTIVO = A.ID_PROCESO) 
      INNER JOIN AGR_IMP_TOTAL_ACT AITA ON (AA.ID_TIPOACTIVO = AITA.ID_TIPOACTIVO AND AA.ID_ACTIVO = AITA.ID_ACTIVO) 
      GROUP BY AA.ID_TIPOACTIVO, AA.ID_ACTIVO, A.DENOMINACION) F2 
**INNER JOIN AGR_IMP_RISK_REAL AIRR ON (COALESCE(F1.ID_TIPOACTIVO,F2.ID_TIPOACTIVO) = AIRR.ID_TIPOACTIVO AND COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO) = AIRR.ID_ACTIVO) 
GROUP BY COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO), COALESCE(F1.NOMBRE,F2.DENOMINACION), COALESCE(F1.IMPACTO_TOTAL,F2.IMPACTO_TOTAL), COALESCE(F1.RIESGO_TOTAL,F2.RIESGO_TOTAL), AIRR.ID_RANGO 
ORDER BY COALESCE(F1.RIESGO_TOTAL,F2.RIESGO_TOTAL) 
ASC,COALESCE(F1.ID_ACTIVO,F2.ID_ACTIVO), COALESCE(F1.NOMBRE,F2.DENOMINACION), AIRR.ID_RANGO 

Спасибо заранее.

+0

Что произойдет, вы получите сообщение об ошибке? Если да, то что? –

+0

Да, я получаю следующие ошибки: > [Error] Сценарий линии: 1-19 ------------------------- Идентификатор состоит из Невозможно связать несколько частей «F1.ID_TIPOACTIVO». > [Error] Сценарий линии: 1-19 ------------------------- Идентификатор состоит из нескольких частей "F1.ID_TIPOACTIVO" нет могут быть связаны > [Error] Сценарий линии: 1-19 ------------------------- Идентификатор состоит из нескольких частей "F1.ID_ACTIVO" нет могут быть связаны > [Error] Сценарий линии: 1-19 ------------------------- Идентификатор состоит из нескольких частей "F1.ID_ACTIVO" нет могут быть связаны Это использование MSSQL –

ответ

1

Я надеюсь, что это поможет

запроса 1 (как у вас)

with 
f1 as (select 1 n from dual), 
f2 as (select 1 m from dual), 
agr_imp_risk_real as (select 1 k from dual) 
select t1.* from f1, f2 inner join agr_imp_risk_real airr on (coalesce(f1.n, f2.m) = coalesce(f2.m, airr.k)); 

Выход: ORA-00904:. "F1" "N": недопустимый идентификатор

Запрос 2

with 
f1 as (select 1 n from dual), 
f2 as (select 1 m from dual), 
agr_imp_risk_real as (select 1 k from dual) 
select f1.* from f1, f2, agr_imp_risk_real airr where coalesce(f1.n, f2.m) = coalesce(f2.m, airr.k); 

Результат запроса: 1

Так что не используйте ключевые слова INNER JOIN или не присоединяйтесь к подзапросам с помощью запятой и ключевыми словами одновременно (на самом деле, я не знаю теории относительно этой проблемы.Я никогда не пытался смешивать в одном запросе оба подхода)