实际上我有一个Oracle 10和MSSQL数据库,我使用这个查询:
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
和{{1}来自F1.ID_ACTIVO
语句(我用**标记了这一行)。我怎么能解决这个问题? (注意,因为我必须在14个subquerys之后添加它。)
这是错误(在AquaData中,使用MSSQL中的数据库):
[错误]脚本行:1-19 ------------------------- El identificador formado por varias partes" F1.ID_TIPOACTIVO& #34;没有pudo enlazar。
[错误]脚本行:1-19 ------------------------- El identificador formado por varias partes" F1.ID_TIPOACTIVO& #34;没有pudo enlazar。
[错误]脚本行:1-19 ------------------------- El identificador formado por varias partes" F1.ID_ACTIVO& #34;没有pudo enlazar。
[错误]脚本行:1-19 ------------------------- El identificador formado por varias partes" F1.ID_ACTIVO& #34;没有pudo enlazar。
这是Oracle中的错误:
[错误]脚本行:1-19 ------------------------- ORA-00904:" F1"。 " ID_ACTIVO":无效标识符
以下是查询:
COALESCE()
提前谢谢。
答案 0 :(得分: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关键字或不要同时使用逗号和关键字加入子查询(实际上,我不知道有关此问题的理论。我从来没有尝试过在一个查询中混合两种方法)