Вложенный подзапрос SQL, ссылающийся на столбец «дедушка и бабушка»

У меня есть особенно сложный запрос для отчета. Он выбирает несколько столбцов из представления, и он должен построить столбец путем агрегированного объединения нескольких полей. Чтобы еще больше усложнить ситуацию, объединение должно содержать 3 поля, даже если в действительности их 0 (объединение разделено запятыми, поэтому пустые поля все равно будут замечены).

Мы используем Oracle 11.1.0.7.0.

Чтобы обеспечить обратную совместимость (необязательно), мы использовали функцию xmlagg для выполнения конкатенации, я полагаю, что она существует с Oracle 8 или 9.

Этот пример будет упрощен, но я считаю, что предоставляет достаточно информации. Другими словами, пожалуйста, не сосредотачивайтесь на нормализации структуры таблицы, это строго пример.

person_view
-----------
name
phone
address
position_id


position_table
--------------
position_id
position_title

Итак, запрос, который у нас сейчас есть, и я признаю, что не являюсь гуру SQL, выглядит примерно так:

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

Моя фактическая ошибка это, кажется, подзапрос, который гарантирует, что по крайней мере 3 строки ввода не могут ссылаться на запрос бабушки и дедушки для определения person_view.position_id.

Я получаю ORA-00904: "PERSON_VIEW". "POSITION_ID": недопустимый идентификатор

Производительность не является большой проблемой, поскольку это отчет, который не будет запускаться регулярно, но мне нужно найти решение для агрегирования этих данных с абсолютными 3 столбцами данных. Мы очень ценим любые рекомендации, которые помогут переписать запрос или разрешить подзапросу доступ к соответствующему столбцу прародителя.

9
задан 9 March 2011 в 15:04
поделиться