![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Последовательное выполнение Select [D5, IB5.x]
Maik © (2002-10-07 18:25:00)Как грамотно организовать в IB5.5+D5
последовательное выполнение
Select * from Table1 .....
затем
Select * from (Первый Select).....
потом
Select * from (Второй Select).....
предложения? ссылки?
Johnmen (2002-10-08 10:18:00) [21]Примерно так :
SELECT
A.kod1,
(SELECT SUM(summa) FROM Table1 B WHERE B.kod1=5) AS S1,
A.kod2,
(SELECT SUM(summa) FROM Table1 B WHERE B.kod2=6) AS S2,
FROM Table1 A
GROUP BY A.kod1, A.kod2
Maik (2002-10-08 10:06:00) [22]Johnmen © (08.10.02 09:24)
>Предложение - написать одним запросом...
Будьте добры подробнее.
Пример:
Есть Table1 вида (kod1,kod2,summa)
Необходимо посчитать sum(summa) для kod1=5
и sum(summa) для kod2=6 , получить результат в виде
одной строки(kod1,sum1,kod2,sum2)
Johnmen (2002-10-08 09:24:00) [23]Предложение - написать одним запросом...
Maik (2002-10-08 09:19:00) [24]Наталия © (08.10.02 06:16)
>В хранимых процедурах есть входные и выходные параметры
Есть то они есть,но попробуйте с помощью параметров
изменить порядок Group by,или Order By.
Можно конечно, но это уже будут разные Select.
1.Процедура будет громоздкой.
2.Нужно все варианты предусмотреть в хр.процедурах
На клиенте составить необходимый запрос гораздо легче.
Есть еще новые предложения по сути вопроса(без хранимых
процедур)?
Наталия (2002-10-08 06:16:00) [25]>Построение запроса зависит от
>нескольких условий,что влияет на поля выборки и на
>условия Group by.(нужно будет очень много хр.процедур)
В хранимых процедурах есть входные и выходные параметры.
Maik (2002-10-07 23:28:00) [26]>evgeg © (07.10.02 23:01)
Спасибо.
В общем можно действительно пойти по пути хр.процедур,
но хотелось бы найти решение для использования запросов
в Query на клиенте.Построение запроса зависит от
нескольких условий,что влияет на поля выборки и на
условия Group by.(нужно будет очень много хр.процедур)
А в общем проблема сводиться к обработке
Select с Union,необходимо выполнить Group by по всем строкам,посчитать sum
Не думаю,что проблема в подходе.
evgeg (2002-10-07 23:03:00) [27]А наиболее грамотно, возможно, пересмотреть решение вашей задачи. Почему то кажется, что вы пытаетесь решить ее с позиций локальных таблиц, а не SQL-сервера.
evgeg (2002-10-07 23:01:00) [28]Используйте хр. процедуры и for select.
create procedure proc1
returns (A integer, B verchar(100)
as
begin
for select A, B
from Table1 ...
into :A, :B
do
suspend;
end;
create procedure proc2
...
begin
for select A, B from proc1
...
end;
Maik (2002-10-07 19:40:00) [29]>AM (07.10.02 18:34)
>SELECT * FROM ( SELECT * FROM ( SELECT * FROM table1 ) )
Что не очень работает.
SELECT * FROM ( SELECT * FROM table1 ) записываем в Query
При запуске выдает:
General SQL error.Token unknown - line 1, char 16 select
Ругается на вложенный Select
Уточняю:
Первый Select содержит Union результат 10-ки тысяч записей
Второй Вычисляет Sum по некоторым полям первого: 100-ни записей
Третий просто добавляет кое-что из других таблиц
Johnmen (2002-10-07 18:37:00) [30]>AM (07.10.02 18:34)
Не надо, уважаемый ! Это же IB, а не Fox какой-нибудь...
AM (2002-10-07 18:34:00) [31]
SELECT * FROM ( SELECT * FROM ( SELECT * FROM table1 ) )
это называется вложенные запросы...
Johnmen (2002-10-07 18:30:00) [32]А что, одним селектом никак ? :-)))