Здесь хранится процедура, которая будет генерировать таблицу на основе данных из одной таблицы и столбца и данных из другой таблицы и столбца.
Функция «sum» (если (col = value, 1,0) ) в качестве значения. Вы можете выбирать из различных функций, таких как MAX (if ()) и т. Д.
delimiter //
create procedure myPivot(
in tableA varchar(255),
in columnA varchar(255),
in tableB varchar(255),
in columnB varchar(255)
)
begin
set @sql = NULL;
set @sql = CONCAT('select group_concat(distinct concat(
\'SUM(IF(',
columnA,
' = \'\'\',',
columnA,
',\'\'\', 1, 0)) AS \'\'\',',
columnA,
',\'\'\'\') separator \', \') from ',
tableA, ' into @sql');
-- select @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- select @sql;
SET @sql = CONCAT('SELECT p.',
columnB,
', ',
@sql,
' FROM ', tableB, ' p GROUP BY p.',
columnB,'');
-- select @sql;
/* */
PREPARE stmt FROM @sql;
EXECUTE stmt;
/* */
DEALLOCATE PREPARE stmt;
end//
delimiter ;
typedef void (*fptr)(void);
Определяет тип fptr как указатель на функцию, которая возвращает значение указанного типа (void) и требует указанных параметров (void)
fptr ptrs[3] = { NULL, get_wisdom, put_wisdom };
Определяет ptrs как вектор 3 элемента, каждый из которых является указателем на одну функцию, которая имеет void в качестве параметра (что угодно) и возвращает void.