Обо мне

Моя фотография
Индивид, которому нравится слушать качественную музыку, а потом делиться впечатлениями с другими!

вторник, 27 апреля 2010 г.

SQL \ Oracle "Множественность"

Хотел бы открыть небольшую серию постов с небольшими решениями на SQL, которые я использовал для написания программы "Электронное табло".
Многим, возможно, это будет неинтересно, но пусть будет!

Представим ситуацию: у вас есть несколько таблиц, в которых хранится разного рода информация, например, о делах, о сторонах о сущности спора. Теперь необходимо отобразить определенные поля. И все бы ничего, но случаются такие ситуации, когда в одном деле участвует несколько истцов и ответчиков.
Про себя я назвал данную ситуацию "множественность истцов, ответчиков".

Запросом вывести сразу всю информацию достачно просто и с этой задачей справится даже школьник. Однако пока не появляется наша множественность.

Для себя я решил эту проблему таким образом. Создается view, который содержит информацию о сторонах. Когда в деле участвует несколько истцов-ответчиков, информация о них записывается в одну строку, разделенную символом ;

CREATE VIEW PLAINTIFF AS
select suit_id, max(LTRIM(sys_connect_by_path(name,'; '),'; ')) app
from (SELECT naznach.suit_id, app_resps.name, row_number() over (partition by naznach.suit_id order by app_resps.name) rn
from Naznach INNER JOIN App_resps ON naznach.suit_id = app_resps.suit_id
WHERE ((app_resps.TYPE=1) Or (app_resps.TYPE=4) Or (app_resps.TYPE=10) Or (app_resps.TYPE=14) Or (app_resps.TYPE=13)))
start with rn = 1
connect by prior rn = rn-1
and prior suit_id = suit_id
group by suit_id
order by suit_id

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