MariaDB 中动态 PIVOT 列名称上的空格
Spaces on Dynamic PIVOT column name in MariaDB
我有这个非常简单的例子:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when NAME = ''',
NAME,
''' then value end) AS ',
replace(NAME, ' ', '_')
)
) INTO @sql
FROM
sourcetable;
SET @sql = CONCAT('SELECT Date, ', @sql, ' from sourcetable group by date');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
完整示例:dbfiddle
我希望 PIVOT table 中的列名称与之前在 NAME 列中的名称与之前存在的所有字符完全匹配。出于某种原因,我需要这个演示文稿,因为它在另一个系统中使用。
我该如何解决这个问题?某种另一种替代?
您可以用 accent graves 结束别名,而不是将 whitespaces 替换为 下划线如
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('MAX( CASE WHEN name = ''',NAME,''' THEN value END) AS `',NAME,'`')
)
INTO @sql
FROM sourcetable;
SET @sql = CONCAT('SELECT Date, ', @sql, ' FROM sourcetable GROUP BY date');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
我有这个非常简单的例子:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when NAME = ''',
NAME,
''' then value end) AS ',
replace(NAME, ' ', '_')
)
) INTO @sql
FROM
sourcetable;
SET @sql = CONCAT('SELECT Date, ', @sql, ' from sourcetable group by date');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
完整示例:dbfiddle
我希望 PIVOT table 中的列名称与之前在 NAME 列中的名称与之前存在的所有字符完全匹配。出于某种原因,我需要这个演示文稿,因为它在另一个系统中使用。
我该如何解决这个问题?某种另一种替代?
您可以用 accent graves 结束别名,而不是将 whitespaces 替换为 下划线如
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('MAX( CASE WHEN name = ''',NAME,''' THEN value END) AS `',NAME,'`')
)
INTO @sql
FROM sourcetable;
SET @sql = CONCAT('SELECT Date, ', @sql, ' FROM sourcetable GROUP BY date');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END