SQL - SQL AVANZADO QUIEN SE ATREVE?

 
Vista:

SQL AVANZADO QUIEN SE ATREVE?

Publicado por carlos (2 intervenciones) el 10/03/2009 12:06:24
Hola amigos tengo una duda que espero que resolvais, por que a mi no me da pa mas.

Tngo una sentencia con inner joins y varios union all.

Y al querer mostrar datos de las tablas secundarias que enlazo, me dice

ORA-00904: "ME"."MASA_CUBIERTA": identificador no válido

como si no ubiese introducido la tabla para la que llamo al campo. Aqui os dejo la sentencia que sera mas faci ver lo que digo. El fallo los esta marcando en el campo introducido en el group by

select Mo.id_monte,Mo.nom_monte,Ma.num_masa,Fa.ano_eval,Gp.id_grado_plaga,Mu.nom_municipio,Es.id_especie,Es.nom_esp_comun,Me.id_distribucion,Me.id_origen_masa,Me.pc_menor3,Me.masa_cubierta,Ma.id_masa,count(distinct(ano_eval)) as sumar from (select * from sp_ficha_ano fa inner join (select gp.*,fad.ID_FICHA_ANO from sp_m_grado_plaga gp inner join sp_ficha_ano_especie_diag fad on (fad.id_grado_plaga=gp.id_grado_plaga) inner join sp_masa Ma on (Ma.id_masa = id_masa) inner join sp_monte Mo on (Mo.id_monte = Ma.id_monte) inner join municipio Mu on (Mu.cod_municipio = Ma.cod_municipio) inner join comarca Co on (Co.cod_comarca = Mu.cod_comarca) inner join provincia Pr on (Pr.cod_provincia = Mu.cod_provincia) inner join sp_masa_especie Me on (Me.id_masa = Ma.id_masa) inner join sp_m_especie Es on (Es.id_especie = Me.id_especie)) tem on (tem.id_ficha_ano=fa.id_ficha_ano) where fa.ANO_EVAL=2001 and tem.id_grado_plaga=2 union all
select * from sp_ficha_ano fa inner join (select gp.*,fad.ID_FICHA_ANO from sp_m_grado_plaga gp inner join sp_ficha_ano_especie_diag fad on (fad.id_grado_plaga=gp.id_grado_plaga) inner join sp_masa Ma on (Ma.id_masa = id_masa) inner join sp_monte Mo on (Mo.id_monte = Ma.id_monte) inner join municipio Mu on (Mu.cod_municipio = Ma.cod_municipio) inner join comarca Co on (Co.cod_comarca = Mu.cod_comarca) inner join provincia Pr on (Pr.cod_provincia = Mu.cod_provincia) inner join sp_masa_especie Me on (Me.id_masa = Ma.id_masa) inner join sp_m_especie Es on (Es.id_especie = Me.id_especie)) tem on (tem.id_ficha_ano=fa.id_ficha_ano) where fa.ANO_EVAL=2000 and tem.id_grado_plaga>1 union all
select * from sp_ficha_ano fa inner join (select gp.*,fad.ID_FICHA_ANO from sp_m_grado_plaga gp inner join sp_ficha_ano_especie_diag fad on (fad.id_grado_plaga=gp.id_grado_plaga) inner join sp_masa Ma on (Ma.id_masa = id_masa) inner join sp_monte Mo on (Mo.id_monte = Ma.id_monte) inner join municipio Mu on (Mu.cod_municipio = Ma.cod_municipio) inner join comarca Co on (Co.cod_comarca = Mu.cod_comarca) inner join provincia Pr on (Pr.cod_provincia = Mu.cod_provincia) inner join sp_masa_especie Me on (Me.id_masa = Ma.id_masa) inner join sp_m_especie Es on (Es.id_especie = Me.id_especie)) tem on (tem.id_ficha_ano=fa.id_ficha_ano) where (fa.ANO_EVAL IN 1999 and fa.ano_eval <> 2000 and fa.ano_eval <> 2001)) group by id_monte,nom_monte,num_masa,ano_eval,id_grado_plaga,nom_municipio,id_especie,nom_esp_comun,id_distribucion,id_origen_masa,pc_menor3,me.masa_cubierta,id_masa having count(distinct (ano_eval)) = 3 order by id_monte,num_masa,ano_eval ASC
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de roger

RE:SQL AVANZADO QUIEN SE ATREVE?

Publicado por roger (93 intervenciones) el 10/03/2009 15:23:41
pareciera que haces referencia a campos de la tabla con alias Me, por fuera del contexto, ya que la tabla en realidad se encuentra dentro de una subconsulta, y se esta llamando por fuera de esta, es lo que alcanzo a observar, o no se si esto es posible en Oracle
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar