![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование агр.ф-ций на временных таблицах в 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]Именно "последним способом". Если не получилось агрегировать в запросе.
Предполагаю, что возможно в запросе, просто ты не смог...:)