Rambler's Top100

(c)2009-2017 openinfotech.ru

СУБД HyTech

Документация
Функция htGroupByHavingTo

htGroupByHavingTo - Обсчет значений полей для групп на подмножестве записей

Назначение:

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

Прототип:

 int HTAPI htGroupByHavingTo(
	LPSAB		fpDst,		/* Для приема результата */
	LPSAB		fpSrc,		/* БДС, задающий подмножество записей */
	int far		*fpnGroup,	/* Номера полей, образующих группу */
	int		nGroupCnt,	/* Число таких полей (до MAX_SORT_ORDER+1) */
	LPGROUP		fpsFunc,	/* Описатели вычислимых выражений */
	int		nFuncCnt,	/* Их число */
	LPHAVING 	fpfHavingTo,	/* Функция, реализующая условие HavingTo */
	void far	*fpUser		/* Пользовательский параметр */
 );

Параметры

fpDst
задает адрес БДС, предназначенного для приема результата
fpSrc
задает адрес БДС, определяющего обрабатываемое множество записей
fpnGroup
задает адрес массива целых, содержащих порядковые номера полей, образующих группу. Группировка записей множества будет выполняться по полям группы. В качестве группы будет рассматриваться подмножество записей, имеющих одинаковые значения заданных полей. По сути дела, будет выполнена сортировка записей по значениям полей группы, поэтому номера полей можно задавать как отрицательные числа: сортировка по этим полям будет выполнена в порядке убывания. Длина полей, составляющих группу, не должна превышать MAX_SORT_LEN байтов
nGroupCnt
определяет число полей, входящих в группу. Число полей, образующих группу не должно превышать MAX_SORT_ORDER+1.
fpsFunc
задает адрес массива структур, описывающих функции, выполняемые для элементов группы. Структура имеет тип GROUP
nFuncCnt
определяет число вычисляемых выражений
fpfHavingTo
задает адрес пользовательской функции фильтрации групп. Функция будет вызываться для каждого нового значения группы. Эта функция имеет прототип HAVING Если такая фильтрация не нужна, следует задать NULL
fpUser
параметр - необязательный. Задает адрес дополнительного параметра, передаваемого в пользовательскую функцию фильтрации

Результат:

0 при успешном завершении
отрицательное число код ошибки

Пример.

Обсчитать среднюю зарплату по отделам. Проверка кодов завершения опущена для простоты.

typedef struct tagSTAFF { /* Структура записи таблицы работников */
	char name[15];
	char address[50];
	unsigned fee;
	int depart;
} STAFF;
int nFld = 4;
GROUP sGrp = { 3, GROUP_AVERAGE, "" };
SAB sAll;
SAB sAvrg;
THANDLE hStaff;
 . . .
/* Все записи таблицы */
htSearch( NULL, &sAll, hStaff, 0, GREAT, "\0\0\0", NULL );
 . . .
/* Обсчет средней зарплаты */
htGroupByHavingTo( &sAvrg, &sAll, &nFld, 1, &sGrp, 1, NULL, NULL );
/* Обсчитано sAvrg.gFoundCnt отделов */