Я пытаюсь развернуть таблицу mysql, которая создается следующим образом:
'CREATE TABLE `fundreturns` (
`Timestamp` datetime NOT NULL,
`FundName` varchar(255) NOT NULL,
`MonthYear` datetime NOT NULL,
`Returns` decimal(9,7) DEFAULT NULL,
PRIMARY KEY (`FundName`,`MonthYear`),
CONSTRAINT `FundName` FOREIGN KEY (`FundName`) REFERENCES `fundnames` (`fund_name`))
. В результате получается таблица, которая выглядит как
Date Company 1 Company 2 ...Company 200
-------------------------------------------------
09/18 {Returns }
07/18
Не каждая компания имеетдоход за каждый месяц, и это один процентный показатель, не нужно суммировать в течение месяца.Я искал решения с использованием mysql или php, я сталкивался с ответами о динамических операторах sql и пытался использовать
SET @@group_concat_max_len = 32000;
SET @sql_dynamic = (
SELECT
GROUP_CONCAT( DISTINCT
CONCAT(
'IF(fundname = '''
, fundname
, ''', returns, NULL) AS '
, fundname
)
)
FROM fundreturns
);
SET @sql = CONCAT('SELECT monthyear, ',
@sql_dynamic, '
FROM fundreturns
GROUP BY monthyear'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
, что дает мне ошибку
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 '(ACL) Alternative Fund,IF(fundname = 'ABCA Reversion', fundreturns, NULL) AS ABC' at line 1
Что яделать неправильно?Есть ли лучший способ сделать это?