与某些其他RDBMS不同,MySQL不原生支持 按设计 进行此类透视操作(开发人员认为它更适合应用程序的表示层而不是数据库层)。
如果您绝对必须在MySQL中执行此类操作,则构建一条准备好的语句是正确的方法-
尽管与其乱七八糟
CASE,我可能只是使用MySQL的
GROUP_CONCAt()函数:
SELECt CONCAt( 'SELECT `table`.id', GROUP_CONCAt(' , `t_', REPLACE(name, '`', '``'), '`.value AS `', REPLACE(name, '`', '``'), '`' SEPARATOR ''), ' FROM `table` ', GROUP_CONCAt(' LEFT JOIN `table` AS `t_', REPLACe(name, '`', '``'), '` ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.idAND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name) SEPARATOR ''), ' GROUP BY `table`.id') INTO @qry FROM (SELECt DISTINCT name FROM `table`) t;PREPARE stmt FROM @qry;EXECUTE stmt;在sqlfiddle上看到它。
请注意,的结果
GROUP_CONCAt()受
group_concat_max_len变量限制(默认为1024字节:除非您有一些非常长的
name值,否则此处不太可能相关)。



