我有以下数据库表:表名 - 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;
但是如果Dim_Module没有任何行,那么程序就不会小心,我会收到错误。
错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在' NULL'附近使用在第1行
请帮忙照顾空桌。
答案 0 :(得分:0)
可能因为@sql
为空。
尝试使用IFNULL将其设置为某个值
SET @sql = CONCAT('SELECT alternative, ', IFNULL(@sql,'somecolumnor*here'), ' FROM sgwebdb.dim_module GROUP BY alternative');
或者检测到@sql
为空并执行其他操作。
答案 1 :(得分:0)
您可以在第二个SELECT
:
IF @sql
THEN
SET @sql = CONCAT('SELECT alternative, ', @sql, ' FROM sgwebdb.dim_module GROUP BY alternative');
prepare stmt from @sql;
END IF;