-9

テーブル「acad_concerns」

id  student_name    start_date  end_date    concern         comments

 1  Anne Curtis     2013-02-27  2013-02-28  Academics       this acad.. 
2   benedict grey   2013-02-27  2013-02-28  Academics       also acad..
3   Anne Curtis     2013-02-27  2013-02-28  Accomodation    this is aco
4   benedict grey   2013-02-27  2013-02-28  Accomodation    also accomo

私はこのように表示したい:

    student_name    Accademics   Accomodation   


    Anne Curtis     this acad..  this is accom..
    benedict grey   also acad..  also accom..
4

2 に答える 2

6

これは説明できません

説明させてください。

あなたは各学生のための値をピボットすることを探しています。残念ながら、MySQLにはピボットテーブル演算子がありません。commentsconcern

ただし、CASE式を使用してこれを行うことができます。そのようです:

SELECT 
  student_name,
  MAX(CASE WHEN concern = 'Academics'   THEN comments END) AS 'Accademics',
  MAX(CASE WHEN concern = 'Accomodation' THEN comments END) AS 'Accomodation'
FROM acad_concern    
GROUP BY student_name;

SQLフィドルデモ

これはあなたに与えるでしょう:

|  STUDENT_NAME |  ACCADEMICS | ACCOMODATION |
----------------------------------------------
|   Anne Curtis | this acad.. |  this is aco |
| benedict grey | also acad.. |  also accomo |

複数concernのsの場合、手動で記述する必要がない場合は、次のような動的SQLを使用して動的にこれを行う必要があります。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT CONCAT('MAX(IF(concern = ''',
      concern, ''', comments, NULL)) AS ', '''', concern , '''')
  ) INTO @sql
FROM acad_concern;

SET @sql = CONCAT('SELECT student_name, ', @sql , '
    FROM acad_concern    
    GROUP BY student_name;');

prepare stmt 
FROM @sql;

execute stmt;

更新されたSQLフィドルデモ

于 2013-02-27T07:21:37.957 に答える
0
   SELECT distinct student_name
        (SELECT comments FROM acad_concern where student_name=student.student_name where concern='Accademics') 
    as Accademics,
        (SELECT comments FROM acad_concern where student_name=student.student_name where concern='Accomodation')
     as Accomodation  
        FROM acad_concern student
于 2013-02-27T07:22:21.443 に答える