如何在mysql中将静态数据透视表转换为动态数据表?

时间:2018-02-13 11:13:01

标签: mysql

我正在开发一个项目,并且我已经在MySQL中创建了一个数据透视表。

SELECT date,
  MAX(IF(cropname = 'tomato', quantity, NULL)) AS Tomatoes,
  MAX(IF(Cropname = 'apple', quantity, NULL)) AS Apples,
  MAX(IF(cropname = 'banana', quantity, NULL)) AS Bananas,
  MAX(IF(Cropname = 'bengal gram', quantity, NULL)) AS Bengal_Gram,
  MAX(IF(Cropname = 'Spinach', quantity, NULL)) AS Spinach,
  MAX(IF(Cropname = 'Beet Root', quantity, NULL)) AS Beet_Root
From tempcrop
Group by date;

目前我正在使用此代码制作数据透视表。我应该如何更改此代码以使其成为动态数据透视表,以便如果我将新记录添加到主表中,则会自动在此处重现。

我已经在stackoverflow以及其他网站上看到了其他问题。它没有用。我试过这段代码

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(Cropname = ''',
      cropname,
      ''', quantity, NULL)) AS ',
      cropname
    )
  ) INTO @sql
FROM tempcrop;
SET @sql = CONCAT('SELECT date, ', @sql, ' FROM tempcrop GROUP BY date');

1 个答案:

答案 0 :(得分:0)

SET @sql = NULL;
SET @@group_concat_max_len = 5000;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(cropname = ''',
      cropname,
      ''', quantity, NULL)) AS ''',
      cropname,''''
    )
  ) INTO @sql
FROM
  tempcrop;

SET @sql = CONCAT('SELECT date, ', @sql, ' FROM tempcrop');

  PREPARE stmt FROM @sql;
  EXECUTE stmt;

此代码完美无缺。