使用动态SQL进入列

时间:2015-02-21 23:54:37

标签: mysql sql dynamic

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

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


PERSONID | AXIS_NUM | DIAGNOSIS_NAME

1 | 1 |抑郁症

1 | 1 |饮食失调

2 | 1 |精神病

3 | 2 |进食障碍

1 | 1 |精神病

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

我希望它看起来像这样:

PERSONID | AXIS_NUM 1(I)| AXIS_NUM 1(II)| AXIS_NUM 1(III)| AXIS_NUM 2(I)|

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

2 |精神病|医学上引起的精神病| Null | Null

3 | Null | Null | Null ||进食障碍

这是我正在使用的代码:

    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的新手,我无法对此进行调试,所以任何帮助都会受到赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

你正试图“转动”。我有一个存储过程,将为您完成大部分工作。见http://mysql.rjweb.org/doc.php/pivot