我正在尝试使用下面的存储过程创建数据透视表视图 . 它适用于Mac OS X,MySQL ver 5.6.16 . 但是当我在Windows,MySQL ver 5.1.45上创建相同的过程时,会出现错误消息:

PREPARE stmt FROM @sql错误代码:1064 . 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“NULL”附近使用正确的语法

存储过程:

DELIMITER $$

CREATE DEFINER=`crossover`@`localhost` PROCEDURE `getPatientTestRecordsEid`(IN varPid int, IN varTid int)
BEGIN

SET @sql = NULL;
SET @myPid = varPid;
SET @myTid = varTid;

SELECT GROUP_CONCAT(DISTINCT
         CONCAT('MAX(CASE WHEN TestDate = ''', TestDate,
                ''' THEN TestResult END) `', TestDate, '`'))
  INTO @sql
  FROM 
(select 
date_format(Test_Record.Date, "%Y-%m-%d") As TestDate, 
Test_Item.EID AS TestItem, 
Test_Record_Detail.Result AS TestResult
from
Test_Record, Test_Record_Detail, Test_Item
where
Test_Record.TR_ID = Test_Record_Detail.TR_ID AND
Test_Item.EID = Test_Record_Detail.EID AND
Test_Record.PID = @myPid AND
Test_Record.TID = @myTid) As t;

SET @sql = CONCAT('SELECT TestItem, ', @sql, ' 
                     FROM 
(select 
date_format(Test_Record.Date, "%Y-%m-%d") As TestDate, 
Test_Item.EID AS TestItem, 
Test_Record_Detail.Result AS TestResult
from
Test_Record, Test_Record_Detail, Test_Item
where
Test_Record.TR_ID = Test_Record_Detail.TR_ID AND
Test_Item.EID = Test_Record_Detail.EID AND
Test_Record.PID = @myPid AND
Test_Record.TID = @myTid) As t 

GROUP BY TestItem');

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

END