我有以下数据库表: 表名 - dim_module
id Creation_Date Goals Alternative Value
-----------------------------------------------------------
1 2014-04-17 10:09:30 G1 A 0.86
2 2014-04-17 10:09:30 G1 B 0.87
3 2014-04-17 10:09:30 G2 A 0.5
4 2014-04-17 10:09:30 G2 B 0
我正在使用以下程序获取所需的输出
CREATE DEFINER=`root`@`localhost` PROCEDURE `stmt`()
BEGIN
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(goals = ''',
goals,
''', round(value, 2), NULL)) AS ',
goals
)
) INTO @sql
FROM sgwebdb.dim_module;
SET @sql = CONCAT('SELECT alternative, ', @sql, ' FROM sgwebdb.dim_module GROUP BY alternative');
prepare stmt from @sql;
END
我通过上述程序获得低于输出。
Alternative G1 G2
-----------------------------
A 0.86 0.50
B 0.87 0.00
但是如果目标列值在第一个表(dim_module)中有空格,那么G1就是G 1 检查下表中的第一行目标列。
id Creation_Date目标替代值 -------------------------------------------------- --------- 1 2014-04-17 10:09:30 G 1 A 0.86 2 2014-04-17 10:09:30 G1 B 0.87 3 2014-04-17 10:09:30 G2 A 0.5 4 2014-04-17 10:09:30 G2 B 0
然后它给出了以下错误
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,MAX(IF(goals = 'Goal1', round(value, 2), NULL)) AS Goal1,MAX(IF(goals = 'Goal2' at line 1
请帮我解决此错误。
答案 0 :(得分:4)
要在字段名称中使用空格,您需要使用反引号来引用它们;
替换
''', round(value, 2), NULL)) AS ', -- Will use field name G 1, breaks
goals
带
''', round(value, 2), NULL)) AS `', -- Will use field name `G 1`, works
goals, '`'
将引用字段名称并允许空格。
答案 1 :(得分:1)
我认为AS
关键字后面的字段名称存在问题。如果字段名称中包含空格,则应引用它。试试这个:
CONCAT(
'MAX(IF(goals = ''',
goals,
''', round(value, 2), NULL)) AS ',
'`', goals,'`'
)