使用动态 SQL 行成列

Rows into Columns using Dynamic SQL

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

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


人物 |AXIS_NUM|DIAGNOSIS_NAME

1 | 1 |抑郁症

1 | 1 |饮食失调

2 | 1 |精神病

3 | 2 |饮食失调

1 | 1 |精神病

2 | 1 |医学诱发的精神病

我希望它看起来像这样:

个人 |AXIS_NUM 1 (I)| AXIS_NUM 1 (二)|AXIS_NUM 1 (三)|AXIS_NUM 2 (一)|

1 |抑郁症|饮食失调|精神病|无

2 |精神病 |医学诱发的精神病|Null|Null

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 的新手,无法调试它,因此我们将不胜感激。谢谢。

您正在尝试 "pivot"。我有一个存储过程可以为您完成大部分工作。参见 http://mysql.rjweb.org/doc.php/pivot