Задать вопрос

Как составить рекурсивный SQL запрос?

Есть три таблицы
spoiler
Таблица каталога продуктов
create table catalog (cid number primary key, -- id раздела
 par_cid number references catalog, -- ссылка на родительский раздел
 rname varchar2(400), -- наименование раздела
 rdescr varchar2(4000), -- описание
 rcdate date -- дата создания
 );
Таблица продуктов
create table products (pid number primary key, -- id продукта
 rcid number references catalog, -- ссылка на каталог
 pname varchar2(500), -- наименование продукта
 pdescr varchar2(4000), -- спецификация
 punit number references units, -- единица измерения
 pper number references persons -- ответственный
 );
Таблица движения продуктов
create table records (rpid number references products, -- продукт
 rdate date, -- дата операции
 incoming varchar2(2) default '1', -- поступление '1', расход '0'
 quantity number, -- количество
 rate number -- цена в рублях
 );

как получить вывод
подобного типа

spoiler
<Наименование раздела каталога уровня1> || Поступление. Руб. || Расход. Руб
...
<Наименование раздела каталога уровня(K-1)> || Поступление. Руб. || Расход. Руб
<Наименование раздела каталога уровня(K)> || Поступление. Руб. || Расход. Руб
<Наименование Продукта1 этого раздела> || Поступление. Руб. || Расход. Руб || Поступление. Количество || Расход. Количество || Остаток
...
<Наименование ПродуктаN этого раздела> || Поступление. Руб. || Расход. Руб || Поступление. Количество || Расход. Количество || Остаток
<Наименование раздела каталога уровня(K)> || Поступление. Руб. || Расход. Руб
<Наименование Продукта1 этого раздела> || Поступление. Руб. || Расход. Руб || Поступление. Количество || Расход. Количество || Остаток
...
<Наименование ПродуктаN этого раздела> || Поступление. Руб. || Расход. Руб || Поступление. Количество || Расход. Количество || Остаток
<Наименование раздела каталога уровня1> || Поступление. Руб. || Расход. Руб
... и так далее аналогично


если количество иерархий неограниченно?
  • Вопрос задан
  • 149 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
либо использовать cte recursive если субд умеет, либо по-народному - циклами
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы