Mysql 使用动态SQL将行转换为列

Mysql 使用动态SQL将行转换为列,mysql,sql,dynamic,Mysql,Sql,Dynamic,我使用的是MySQL Server Management Studio,有3个表:Person、ClientDiagnosis和Diagnosis。这些表中有我希望显示为列的数据行。我在这里发现了类似的问题,还有一个答案似乎很接近:建议使用动态sql,因为列的数量会根据行的不同而变化 这就是我所拥有的(请原谅格式问题,因为我没有看到表的降价。如果有人能告诉我怎么做,我很乐意修复它): PERSONID | AXIS | NUM | DIAGNOSIS | u NAME 1 | 1 |凹陷 1

我使用的是MySQL Server Management Studio,有3个表:Person、ClientDiagnosis和Diagnosis。这些表中有我希望显示为列的数据行。我在这里发现了类似的问题,还有一个答案似乎很接近:建议使用动态sql,因为列的数量会根据行的不同而变化

这就是我所拥有的(请原谅格式问题,因为我没有看到表的降价。如果有人能告诉我怎么做,我很乐意修复它):


PERSONID | AXIS | NUM | DIAGNOSIS | u NAME 1 | 1 |凹陷 1 | 1 |进食障碍 2 | 1 |精神病 3 | 2 |进食障碍 1 | 1 |精神病 2 | 1 |医学诱发的精神病 我希望它看起来像这样:

人形|轴数1(I)|轴数1(II)|轴数1(III)|轴数2(I)| 1 |抑郁|进食障碍|精神病|无效 2 |精神病|医学诱发的精神病|无效|无效 3 |空|空|空|进食障碍 这是我正在使用的代码:

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'max(CASE WHEN AxisNum = ''',
      AxisNum,
      ''' THEN d.DiagnosisID END) AS `',
      AxisNum, '`'
    )
  ) INTO @sql
FROM ClientDiagnosis;


SET @sql 
  = CONCAT('SELECT p.personid ', @sql, ' 
           from Person p
           left join ClientDiagnosis cd
             on p.Personid = cd.pdid
           left join Diagnosis d
             on cd.DiagnosisID=d.diagnosisid
           group by p.Personid');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我对动态sql是如此陌生,以至于我无法调试它,因此任何帮助都将不胜感激。谢谢。

您正在尝试“旋转”。我有一个存储过程,它将为您完成大部分工作。请参见

谢谢您的建议。我想知道是否还有别的办法。我试试这个。