我正在使用 MySQL Server Management Studio,有 3 个表:Person、ClientDiagnosis 和 Diagnosis。这些表中的行包含我希望显示为列的数据。我在这里发现了类似的问题,并且有一个似乎很接近的答案:建议使用动态 sql,因为列数会根据行而变化。
这就是我所拥有的(请原谅格式,因为我没有看到表格的 Markdown 。如果有人可以告诉我如何修复它,我很乐意修复它):
<小时/>人员 ID |AXIS_NUM|DIAGNOSIS_NAME
1 | 1 |抑郁症
1 | 1 |饮食失调
2 | 1 |精神病
3 | 2 |饮食失调
1 | 1 |精神病
2 | 1 |药物诱发的精神病
我希望它看起来像这样:
人员 ID |AXIS_NUM 1 (I)| AXIS_NUM 1 (II)|AXIS_NUM 1 (III)|AXIS_NUM 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 很陌生,无法调试它,所以任何帮助将不胜感激。谢谢。
最佳答案
您正在尝试“旋转”。我有一个存储过程可以为您完成大部分工作。请参阅http://mysql.rjweb.org/doc.php/pivot
关于mysql - 使用动态 SQL 将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652833/