Вы можете использовать такой код:
char *MyFunction(some arguments...)
{
char *pointer = malloc(size for the new array);
if (!pointer)
An error occurred, abort or do something about the error.
return pointer; // Return address of memory to the caller.
}
Когда вы это сделаете, память должна быть освобождена позже, передав адрес бесплатно.
Есть другие варианты , Подпрограмма может возвращать указатель на массив (или часть массива), который является частью некоторой существующей структуры. Вызывающий может передать массив, и программа просто записывает в массив, а не выделяет пространство для нового массива.
Вы можете использовать grouping sets
:
SELECT COALESCE(CustomGroup, 'Total') as CustomerGroup,
Mastergroup AS Receipts, SUM(ReceiptAmount) AS 'Sum'
FROM TableA a CROSS APPLY
(VALUES (CASE WHEN MasterGroup in ('A', 'B') THEN 'Group 1'
WHEN MasterGroup in ('C', 'D') THEN 'Group 2'
WHEN MasterGroup in ('E') THEN 'Group 3'
END)
) v(custom_group)
WHERE [MasterGroup] IN ('Other','A', 'B', 'C', 'D', 'E')
GROUP BY GROUPING SETS ( (CustomGroup, Mastergroup), (CustomGroup) );
Формат немного отличается от указанного, но он должен быть достаточно похожим.