Mysql 使用动态SQL将行转换为列
我使用的是MySQL Server Management Studio,有3个表:Person、ClientDiagnosis和Diagnosis。这些表中有我希望显示为列的数据行。我在这里发现了类似的问题,还有一个答案似乎很接近:建议使用动态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
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是如此陌生,以至于我无法调试它,因此任何帮助都将不胜感激。谢谢。您正在尝试“旋转”。我有一个存储过程,它将为您完成大部分工作。请参见谢谢您的建议。我想知道是否还有别的办法。我试试这个。