MySql Pivot возвращает только половину столбцов - PullRequest
0 голосов
/ 02 августа 2020

У меня есть такие табличные данные

table name = tbl_fgm_career

+------+-------+------+
| name | value | year |
+------+-------+------+
| a1   | 12    | 1970 |
| a2   | 56    | 1970 |
| a1   | 65    | 1971 |
| b7   | 555   | 1971 |
| .    | .     | .    |
| .    | .     | .    |
| .    | .     | .    |
| ab2  | 890   | 2019 |
+------+-------+------+

И я написал эту процедуру для преобразования значений года в столбцы

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pivot_question`()
BEGIN
    SELECT
      GROUP_CONCAT(
    CONCAT("SUM(IF(year='", year, "',value ,0)) AS '", year, "'"), "\n"
      ) INTO @answers
    FROM (
      SELECT DISTINCT year FROM tbl_fgm_career
    ) A;

    SET @query := 
      CONCAT(
        'SELECT name, ', @answers, 
        ' FROM tbl_fgm_career  GROUP BY name'
      );

    PREPARE statement FROM @query;
    EXECUTE statement;
END$$
DELIMITER ;

Всего у меня было 50 лет (1970-2019) . Но при вызове этой процедуры я получаю только до 1994 года. Если я изменил порядок на год на DES C, я получаю столбцы с (2019 по 1995 год)

Как решить эту проблему.

1 Ответ

0 голосов
/ 04 августа 2020

максимальный размер по умолчанию для GROUP_CONCAT равен 1024. Вот почему у меня мало столбцов.

Я использовал SET SESSION group_concat_max_len = 1000000;, и моя проблема была решена.

Кредиты: @ P.Salmon

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...