我正在使用MySQL Server Management Studio并有3个表,Person,ClientDiagnosis和Diagnosis。这些表包含我希望显示为列的数据行。我在这里找到了类似的问题,其中一个答案似乎很接近:建议使用动态sql,因为列数会因行而异。
这就是我所拥有的(原谅格式,因为我没有看到桌子的降价。如果有人能告诉我如何,我很乐意解决它):
我希望它看起来像这样:
这是我正在使用的代码:
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的新手,我无法对此进行调试,所以任何帮助都会受到赞赏。谢谢。