mysql pivot只返回一半的列

cld4siwp  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(313)

我有这样的表格数据

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年。如果我将order by year改为desc,那么我得到的列是(2019到1995)
如何解决这个问题。

lymgl2op

lymgl2op1#

组\u concat的最大默认大小为1024。这就是为什么我的专栏很少。
我曾经 SET SESSION group_concat_max_len = 1000000; 我的问题解决了。
学分:@p.salmon

相关问题