![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сохранить запрос и сделать union с другим запросом [D7, IB6.x]
yk © (2005-09-21 13:51:00)Уважаемые Мастера!
Помогите пожалуйста, со следующей задачей:
есть некоторое (неизвестное заранее) кол-во РАЗНЫХ ДЕТАЛЕЙ.
Каждая ДЕТАЛЬ может состоять из нек-рых ЭЛЕМЕНТОВ.
В разные детали могут входить одни и те же ЭЛЕМЕНТЫ.
Есть хранимая процедура -
РАЗОБРАТЬ(ИД_ДЕТАЛИ): ИД_ЭЛЕМНЕТА, КОЛ-ВО_ЭЛ_В_ДЕТАЛИ
Мне надо вывести итог : Сколько всего РАЗНЫХ ЭЛЕМЕНТОВ в этом НАБОРЕ ДЕТАЛЕЙ.
Хранимая процедура ВЫВОД_ЭЛЕМЕНТОВ(УСЛОВИЕ_ВЫБОРА_ДЕТАЛЕЙ)
returns
(ИД_ЭЛЕМЕНТА,
КОЛ-ВО_ЭЛ_В_НАБОРЕ)
begin
for
select ИД_ДЕТАЛИ, КОЛ-ВО_ДЕТАЛИ
form ДЕТАЛЬ
where УСЛОВИЕ_ВЫБОРА_ДЕТАЛЕЙ
into :ИД_ДЕТАЛИ,:КОЛ-ВО_ДЕТАЛИ
do
begin
select ИД_ЭЛЕМНЕТА,
(КОЛ-ВО_ЭЛ_В_ДЕТАЛИ*КОЛ-ВО_ДЕТАЛИ)
as ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ
from РАЗОБРАТЬ(ИД_ДЕТАЛИ)
into :ИД_ЭЛЕМНЕТА,:ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ
/*
А вот тут я незнаю что делать!!!
т.к. мне теперь надо сложить
все эти :ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ
Это можно сделать
select
sum(ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ)
from ???
group by ИД_ЭЛЕМНЕТА
Здесь ??? - это union всех запросов РАЗОБРАТЬ
Короче я незнаю как мне сохранить результаты запроса так,
чтобы потом к ним можно было сделат union в цикле
*/
end;
suspend
end;
INTERBASE
ПОМОГИТЕ ПОЖАЛУЙСТА!
evvcom (2005-09-23 13:38:00) [1]
> По кажному ид-шнику процедура
> РАЗОБРАТЬ(ид_детали) возвращает набор элементов, входящих
> в деталь
Это делается в одном запросе безо всяких union
yk (2005-09-23 13:07:00) [2]Эврика!!!
Горячий чай делает чудеса!
я таки поняла как мне это заделать
описывать долго , но в итоге по Johnmen -ну
яду,яду мне ...
и молотком по затылку...
8))
всех люблю
Johnmen (2005-09-23 12:53:00) [3]
> yk © (23.09.05 11:59) [6]
> жуть
Да что ты...
> а затем - скока ид-шников - стока и объединяемых с помощью
> union наборов данных (они получаются из хранимой процедуры
> другой)
Вот она, эта ХП, и есть. Т.е. гонишь все эти НД наружу...:)
yk (2005-09-23 12:50:00) [4]Извините за глаза
По кажному ид-шнику процедура
РАЗОБРАТЬ(ид_детали) возвращает набор элементов, входящих в деталь
вот эти наборы данных я и объединяю
evvcom (2005-09-23 12:25:00) [5]
> У мен просто с помощью запроса выбираются нек-рое кол-во
> id-шников
> а затем - скока ид-шников - стока и объединяемых с помощью
> union наборов данных
Чего ты там с union объединяешь? Id из одной таблицы? И приводи хоть какие-то куски запросов, только не в верхнем регистре, а то в глазах рябит от CapsLock.
yk (2005-09-23 11:59:00) [6]жуть
а как же мне получить с помощью хп это?
У мен просто с помощью запроса выбираются нек-рое кол-во id-шников
а затем - скока ид-шников - стока и объединяемых с помощью union наборов данных (они получаются из хранимой процедуры другой)
т.е. мне надо сделать процеруру, которая бы объединяла произвольное кол-во наборов данных????
8(
Johnmen (2005-09-23 11:12:00) [7]
> yk © (23.09.05 11:06) [4]
> Вопрос:
>
> Есть некоторый набор данных, собранный при помощи union
>
> как мне сделать над этим набором данных
>
> sum()
> ..
> group by...
Этот НД должен быть получен с пом.ХП. Тогда и селект из неё, и с сум, и с групбай, и с ...
:)
yk (2005-09-23 11:06:00) [8]Вопрос:
Есть некоторый набор данных, собранный при помощи union
как мне сделать над этим набором данных
sum()
..
group by...
evvcom (2005-09-22 09:37:00) [9]
> yk © (22.09.05 08:15) [2]
Ну так а sum тебе на что?
yk (2005-09-22 08:15:00) [10]типа того, только
Загвоздка в том, что
не просто
from РАЗОБРАТЬ(ИД_ДЕТАЛИ)
дело в том, что разных деталей может быть несколько
т.е.
ИТОГО_ДЛЯ_ЭЛ1=КОЛ_ДЕТ1*КОЛ_ЭЛ1_В_ДЕТ1+КОЛ_ДЕТ2*КОЛ_ЭЛ1_В_ДЕТ2+...+КОЛ_ДЕТn*КОЛ_ЭЛ1_В_ДЕТn
....
Johnmen (2005-09-21 14:21:00) [11]Типа того ?
select ИД_ЭЛЕМНЕТА,
SUM(КОЛ-ВО_ЭЛ_В_ДЕТАЛИ*КОЛ-ВО_ДЕТАЛИ)
as ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ
from РАЗОБРАТЬ(ИД_ДЕТАЛИ)
group by ИД_ЭЛЕМНЕТА
into :ИД_ЭЛЕМНЕТА,:ОБЩ_КОЛ-ВО_ЭЛ_В_ДЕТ