Как сгруппировать несколько записей по идентификатору, переданному через хранимую процедуру через запятую? - PullRequest
0 голосов
/ 16 апреля 2020

Ниже приведен запрос, который я использую, чтобы получить сгенерированную формулу, основанную на группе concat, поэтому я могу применить одну и ту же формулу к другой таблице. он работает нормально для одного идентификатора, так как не работает для идентификатора, разделенного запятыми

/ * id_val = '6,7'; // задано в параметре sp * /

SET @query = (SELECT GROUP_CONCAT(CONCAT('(SUM(',column_name_table,') / sum(count_of_x) ) * 100 
    as ',kpi_display_name,' ') ) FROM `formula_table` WHERE id IN (id_val) );

SELECT @query;

Где count_of_x - это состояние c value; Аргумент column_name_table - это поле в формуле_таблицы

, но приведенный выше запрос возвращает одно значение;

структура таблицы в виде

CREATE TABLE `formula_table` (
      `id` int NOT NULL AUTO_INCREMENT,
      `column_name_table` varchar(255) DEFAULT NULL
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=84 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;





insert  into `formula_table`(`id`,`column_name_table`) values 
(5,'higest_record'),
(6,'higest_salary'),
(7,'higest_employee'),
(9,'higest_x');

1 Ответ

0 голосов
/ 16 апреля 2020

Я пытался решить эту проблему

SET @g_formula  = "";
SET @query = CONCAT('   select group_concat(column_table_name) into @g_formula from (
            select concat("(sum(",column_table_name,")/","sum(count_of_x)) * 100 as ",column_table_name) as column_table_name

            from (

            select column_table_name from formula_table

            where id in (',id_val,')  

             ) as aa ) as bb

    ');
SELECT @query;
PREPARE stmt FROM @query;
EXECUTE stmt;

SELECT @g_formula;
...