Как сохранить запрос и сделать union с другим запросом

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
yk
Сообщения: 26
Зарегистрирован: 31 янв 2005, 11:37

Как сохранить запрос и сделать union с другим запросом

Сообщение yk » 21 сен 2005, 13:57

Уважаемые Мастера!

Помогите пожалуйста, со следующей задачей:

есть некоторое (неизвестное заранее) кол-во РАЗНЫХ ДЕТАЛЕЙ.
Каждая ДЕТАЛЬ может состоять из нек-рых ЭЛЕМЕНТОВ.
В разные детали могут входить одни и те же ЭЛЕМЕНТЫ.

Есть хранимая процедура -
РАЗОБРАТЬ(ИД_ДЕТАЛИ): ИД_ЭЛЕМНЕТА, КОЛ-ВО_ЭЛ_В_ДЕТАЛИ

Мне надо вывести итог : Сколько всего РАЗНЫХ ЭЛЕМЕНТОВ в этом НАБОРЕ ДЕТАЛЕЙ.

Хранимая процедура ВЫВОД_ЭЛЕМЕНТОВ(УСЛОВИЕ_ВЫБОРА_ДЕТАЛЕЙ)
returns
(ИД_ЭЛЕМЕНТА,
КОЛ-ВО_ЭЛ_В_НАБОРЕ)
begin

for
select ИД_ДЕТАЛИ, КОЛ-ВО_ДЕТАЛИ
form ДЕТАЛЬ
where УСЛОВИЕ_ВЫБОРА_ДЕТАЛЕЙ
into :ИД_ДЕТАЛИ,:КОЛ-ВО_ДЕТАЛИ
do
begin

select ИД_ЭЛЕМНЕТА,
(КОЛ-ВО_ЭЛ_В_ДЕТАЛИ*КОЛ-ВО_ДЕТАЛИ)
as ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ
from РАЗОБРАТЬ(ИД_ДЕТАЛИ)
into :ИД_ЭЛЕМНЕТА,:ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ
/*
А вот тут я незнаю что делать!!!
т.к. мне теперь надо сложить
все эти :ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ

Это можно сделать

select
sum(ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ)
from ???
group by ИД_ЭЛЕМНЕТА

Здесь ??? - это union всех запросов РАЗОБРАТЬ
Короче я незнаю как мне сохранить результаты запроса так,
чтобы потом к ним можно было сделат union в цикле
*/
end;

suspend
end;

INTERBASE

ПОМОГИТЕ ПОЖАЛУЙСТА!

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Как сохранить запрос и сделать union с другим запросом

Сообщение Dimitry Sibiryakov » 22 сен 2005, 08:32

yk писал(а):Уважаемые Мастера!

есть некоторое (неизвестное заранее) кол-во РАЗНЫХ ДЕТАЛЕЙ.
Каждая ДЕТАЛЬ может состоять из нек-рых ЭЛЕМЕНТОВ.
В разные детали могут входить одни и те же ЭЛЕМЕНТЫ.

Есть хранимая процедура -
РАЗОБРАТЬ(ИД_ДЕТАЛИ): ИД_ЭЛЕМНЕТА, КОЛ-ВО_ЭЛ_В_ДЕТАЛИ

Мне надо вывести итог : Сколько всего РАЗНЫХ ЭЛЕМЕНТОВ в этом НАБОРЕ ДЕТАЛЕЙ.
А без процедуры РАЗОБРАТЬ доступ к таблице элементов невозможен? Если возможен, то все тривиально:
SELECT count(DISTINCT ИД_ЭЛЕМЕНТА) FROM ДЕТАЛИ join ЭЛЕМЕНТЫ on ДЕТАЛИ.ИД_ДЕТАЛИ = ЭЛЕМЕНТЫ.ИД_ДЕТАЛИ where .....

Ответить