MySQL表格枢轴 - 动态

时间:2016-11-23 20:34:19

标签: mysql sql pivot-table

...的sooo

目前在Wordpress中重新创建自定义构建网站,我需要传输内容。

我创建了一个临时表,其中包含我需要的数据以及以下结构 naam_theater(varchar)是id naam(varchar)这是关键 waarde(varchar)是值

我需要在每个naam_theater的行中使用csv获取这些内容,每个naam显示waarde的列。

所以我提出了这个问题:

SET @@group_concat_max_len = 320000;
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'IF(waarde = ''',
      naam,
      ''', waarde, NULL) AS ',
      naam
    )
  ) INTO @sql
FROM
  temp_theaters;
SET @sql = CONCAT('SELECT naam_theater, ', @sql, ' 
                  FROM temp_theaters 
                  GROUP BY naam_theater');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

当我运行这个时,我收到一个错误#1064,说我的SQL语法错误接近' plaats,IF(waarde =' Postadres postcode',waarde,NULL)AS Postadres邮政编码,IF('

所以我猜这个问题是由我的字段中的间距引起的(现在成为一个列)。但我似乎无法找到解决方案。

有什么建议吗?

更新

目前使用此查询,0行结果是由于phpmyadmin中的问题:

SET @@group_concat_max_len = 32000000;
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(waarde = ''',
      naam,
      ''', waarde, NULL)) AS `',
      naam,
      '`'
    )
  ) INTO @sql
FROM
  temp_theaters;
SET @sql = CONCAT('SELECT naam_theater, ', @sql, ' 
                  FROM temp_theaters 
                  GROUP BY naam_theater');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我现在得到的结果越来越近了。只有,我的字段(naam_theater除外)现在为空。虽然他们的确有内容。

我不确定如何才能最好地包含表格数据,所以我只是在点击它的屏幕截图。 I'm not sure on how I could best include table data so I'm just insterting this screenshot of it.

1 个答案:

答案 0 :(得分:1)

问题在于你的名字中有空格,因此当你将它们用作列别名时,你需要将它们放在反引号中。

您还缺少对SUM()MAX()等分组功能的调用,以便将组中的所有行都放入结果中的同一行。

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(naam = ''',
      naam,
      ''', waarde, NULL)) AS `',
      naam,
      '`'
    )
  ) INTO @sql
FROM
  temp_theaters;