0

テーブル名 user があります。このテーブルには、ユーザーの名前とカテゴリがあります (例: 学生、従業員)。

ここで、学生であるすべてのユーザーが学生の列に表示され、従業員であるすべてのユーザーが従業員の列に表示されるように、タイプで区切られたユーザーとして他のテーブルにユーザーを表示したいと思います。

例 :

ユーザー表:

Name       Category
John       Student
Jack       Student
Fred       Employee

出力テーブル:

ID    Student    Employee
1     John     
2     Jack
3                 Fred

そのテーブルを表示するためのクエリは何でしょうか。

4

1 に答える 1

2
SELECT  ID,
        MAX(CASE WHEN Category = 'Student' THEN Name ELSE NULL END) Student,
        MAX(CASE WHEN Category = 'Employee' THEN Name ELSE NULL END) Employee
FROM    User
GROUP   BY ID

結果

╔════╦═════════╦══════════╗
║ ID ║ STUDENT ║ EMPLOYEE ║
╠════╬═════════╬══════════╣
║  1 ║ John    ║ (null)   ║
║  2 ║ Jack    ║ (null)   ║
║  3 ║ (null)  ║ Fred     ║
╚════╩═════════╩══════════╝

更新 1

他のカテゴリがある場合は、動的 SQLが優先されます。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(case when Category = ''',
      Category,
      ''' then Name end) AS ',
      Category
    )
  ) INTO @sql
FROM User;

SET @sql = CONCAT('SELECT  ID, ', @sql, ' 
                    FROM    User
                    GROUP   BY ID');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2013-03-09T12:00:18.307 に答える