我正在尝试使用下面的存储过程创建数据透视表视图 . 它适用于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