Tengo una consulta particularmente complicada para un informe. Selecciona varias columnas de una vista y debe construir una columna mediante la concatenación agregada de varios campos. Para complicar aún más las cosas, la concatenación debe contener 3 campos, incluso si hay 0 en realidad (la concatenación está delimitada por comas, por lo que todavía se notarán los campos vacíos).Subconsulta anidada en SQL que hace referencia a la columna de abuelos
Estamos utilizando Oracle 11.1.0.7.0.
Para proporcionar compatibilidad con versiones anteriores (no es necesario), se utilizó la función XMLAGG para realizar la concatenación, creo que ha existido desde Oracle 8 o 9.
se simplificará este ejemplo, pero me siento proporciona información suficiente. En otras palabras, por favor no se concentre en la normalización de la estructura de la tabla, esto es estrictamente un ejemplo.
person_view
-----------
name
phone
address
position_id
position_table
--------------
position_id
position_title
lo que la consulta que tienen actualmente, y me reconocen no ser un gurú de SQL, es algo así como:
select
name,
phone,
address,
(select
xmlagg(xmlelement(e, position_title || ',')).extract('//text()')
from
(select
position_title
from
position_table
where
position_table.position_id = person_view.position_id and
rownum <= 3
union all select '' from dual
union all select '' from dual
union all select '' from dual
)
where
rownum <= 3
)
from
person_view
Mi error real es que, al parecer, la subconsulta que asegura al menos 3 filas de entrada no pueden hacer referencia a la consulta de abuelos para determinar person_view.position_id.
me sale ORA-00904: "PERSON_VIEW" "POSITION_ID":. Identificador no válido Rendimiento
no es una gran preocupación, ya que este es un informe que no se pasan con regularidad, pero tengo que encontrar una solución para agregar estos datos con un total de 3 columnas de datos. Cualquier orientación para ayudar a reescribir la consulta, o permitir que la subconsulta tenga acceso a la columna de abuelos correspondiente es muy apreciada.
+1 para la pregunta muy bien escrito. Ojalá todos estuvieran tan claramente presentados. –