MySQL动态透视与concat组

MySQL动态透视与concat组,mysql,sql,Mysql,Sql,各位早上好, 我有一个叫做salesData的视图,它基本上是这样的,我想动态地透视它,因为它以后可能会更新 +-------------+------------+------+ | salesTotal | salesYear | | +-------------+------------+------+ | 3016207 | 2008 | | | 3079627 | 2009 | | | 3133681 |

各位早上好,

我有一个叫做salesData的视图,它基本上是这样的,我想动态地透视它,因为它以后可能会更新

+-------------+------------+------+
| salesTotal  | salesYear  |      |
+-------------+------------+------+
|    3016207  |       2008 |      |
|    3079627  |       2009 |      |
|    3133681  |       2010 |      |
|    3102944  |       2011 |      |
|    3126710  |       2012 |      |
|    3123600  |       2013 |      |
|    3116452  |       2014 |      |
|    3175186  |       2015 |      |
|     122371  |       2016 |
+-------------+------------+------+
我设计了以下查询,但它似乎不起作用。MySQL workbench向我发送了一条奇怪的错误消息:

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 ' MAX(CASE WHEN salesYear='2008 THEN 3016207 ELSE 0 END) AS 2008,MAX(CASE WHEN sa' at line 1
我的质询如下:

SET @sql = NULL;
SELECT 
    GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN salesYear=''',salesYear,''' THEN ',salesTotal, ' ELSE 0 END) AS ',salesYear))
INTO @sql 
FROM salesData;

SET @sql = CONCAT('SELECT, ', @sql, ' FROM salesData');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
如果有人能给我一个提示,我将不胜感激。非常感谢:)

哦,顺便说一句,我想要的结果是:

|    2008 |    2009 |    2010 |    2011 |    2012 |    2013 |    2014 |    2015 |  |
+---------+---------+---------+---------+---------+---------+---------+---------+--+
| 3133681 | 3133681 | 3133681 | 3102944 | 3126710 | 3126710 | 3126710 | 3126710 |  |
+---------+---------+---------+---------+---------+---------+---------+---------+--+
我是通过以下查询得到的,但这个问题的关键是使这个查询非常动态;):

编辑:我发现了错误。此表达式中的salesYear未正确连接

GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN salesYear=''',salesYear,''' THEN ',salesTotal, ' ELSE 0 END) AS ',salesYear))
当我用如下所示的字符串值替换它时,查询工作得非常好。有人知道如何将salesYear变量置于单引号之间吗

 GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN salesYear=''',salesYear,''' THEN ',salesTotal, ' ELSE 0 END) AS ','test'))

CONCAT(“”,salesYear,“”)有效。单引号似乎不起作用:)

CONCAT(“”,saleyear,“”)起作用。单引号似乎不起作用:)

可能是重复的,我不知道这里有这个帖子,但是谢谢你的非常有用的评论。我自己找到了问题的答案:)可能是重复的,我不知道这里有这个帖子,但是谢谢你非常有用的评论。我自己找到了问题的答案:)
 GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN salesYear=''',salesYear,''' THEN ',salesTotal, ' ELSE 0 END) AS ','test'))