Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование агр.ф-ций на временных таблицах в IB [D2005, XP]


Проходящий ©   (2008-11-01 12:01:00) 

Доброго времени суток, уважаемы мастера. У меня до безобразия глупый вопрос. Он заключается в следующем. Я создаю запрос в IBQUERY где использую несколько разных таблиц. И мне теперь необходимо по новой "временной" таблице провести некоторые вычисления, таких как Count, Max, Sum. Вот только проблема. Никак не получается создать выборку, используя ее для агр. ф-ций, используя временный набор. Просмотрел литературу, там в основном как правило вложение запроса после Where идет при сравнении столбцов и т.д. А мне нужно производить подсчет во вновь организованной таблице Select на основе нескольких таблиц. Не подскажите как можно сформулировать запрос что то вроде Select Count(*) form Table where Table = (select.....моя таблица). Или есть ли возможность объединить другой IBQuery, который бы обратился к dataset первого Query. Конечно, есть возможность обработки временной таблицы программным способом в стиле пробега по столбцам и строкам от first до eof(query). Но думаю это оставить на последний способ применения. Не подскажите, мастера, как можно решить поставленную задачу?


Правильный$Вася   (2008-11-01 21:50:00) [1]


>  временных таблицах в IB

нет там такого понятия

а ХП очень были бы к месту, хотя в твоем случа и вьюхой, вероятно,можно обойтись, если никаких параметров хитрых в запросе нет


Проходящий   (2008-11-01 14:21:00) [2]

Johnmen ©   (01.11.08 13:53) [4]
у меня возникала мысль создать View. Надо будет обдумать этот вариант.


Проходящий   (2008-11-01 14:21:00) [3]

извеняюсь, что лагнула связь


Проходящий   (2008-11-01 14:20:00) [4]

Johnmen ©   (01.11.08 13:53) [4]
у меня возникала мысль создать View. Надо будет обдумать этот вариант.


Проходящий   (2008-11-01 14:19:00) [5]

Постараюсь привести один запросов:

IBQuery_Report.SQL.Add('Select B.ACHRTYPE as "Тип автоматики", B.Region as "Район", B.OBJECT as "Объект", B.CONSUMER as "Присоединение", '+
                 'B.NUM_OCHERED_ACHR as "№ очереди", B.FREQ_ACHR as "F.cp", B.VREMYA_ACHR as "T.cp", B.CH_APV as "ЧАПВ", B.NUM_OCHERED_APV as "№ очереди ЧАПВ", '+
                 'B.FREQ_APV as "F.cp.apv", B.VREMYA_APV as "T.cp.apv", P.D_Date as "Дата", P.P_MIN as "Pmin", P.P_MAX as "Pmax" from A4R_BASETABLE B, POWER_A4R P ' +
                 'Where B.ID_STR = P.ID_LINE AND P.D_DATE = :data1 Order by B.ACHRTYPE, B.Region, B.OBJECT, B.CONSUMER' );

Вот я получил таблицу. Мне в ней нужно вычислить следующее:
Общий объема АЧР-1: Sum(pmax) where B.ACHRTYPE:='АЧР-1', b.ID_str= P.ID_LINE, P.D_DATE = :data1
в том числе АЧР-1  Запад: сравнение по Region.
                            в регионе Запад: 1 очередь - сравненеи с NUM_OCHERED_ACHR
                                                     2 чередь -...  
                          Восток:
                           и т.д.

и вот так у меня должен строится расчетный список.


Johnmen   (2008-11-01 13:53:00) [6]


> Проходящий   (01.11.08 12:31) [2]

Если не удаётся сразу, единственным запросом, получить потребное клиентскому приложению, то посмотри в сторону VIEW и хранимых процедур.


Сергей М.   (2008-11-01 12:44:00) [7]


> Проходящий


Все это беллетристика)

Ты скажи кратко и внятно - конкретный твой запрос компилируется или нет ?

Если не компилируется, то по какой конкретно причине ?

Если компилируется и даже работает, но не так как тобой ожидалось, то все равно без текста конкретного запроса сказать ничего нельзя..

Надеюсь. ты в курсе, что в IB кроме DSQL существует еще и PSQL ?


Проходящий   (2008-11-01 12:31:00) [8]

Как раз таки и не получится при сборе нескольких таблиц :) вот просто так применить агрегатные функции, ввиду того, что при использовании запроса на образование временной "сводной" таблицы по которому требуется провести некоторый расчет используются разные ключи. А над временной таблицей, например, нужно провести всего лишь пару расчетов, и уже исходя из полученных данных, вновь организовывать временную таблицу, которая будет базироваться как полученном расчете предыдущей, плюс другие ключи из других таблиц. А вся литература, которую я просматривал не использует вариант построения запроса, который я привел в [1]. Вот и пытаюсь сообразить, как можно решить поставленную задачку :).


Johnmen   (2008-11-01 12:14:00) [9]

Именно "последним способом". Если не получилось агрегировать в запросе.
Предполагаю, что возможно в запросе, просто ты не смог...:)


Наверх

Титульная страница Поиск, карта сайта Написать письмо