慕的地10843
与其他一些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, '`', '``'), '`.id
AND `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值,否则此处不太可能相关)。