我有一个表名user,在这个表中users有他们的名字和类别(例如:学生、雇员)。
现在,我想将其他表中的用户显示为按类型分隔的用户,就像所有学生用户将显示在学生列中,所有员工用户将显示在雇员列中一样。
示例:
用户表:
Name Category
John Student
Jack Student
Fred Employee
输出表:
ID Student Employee
1 John
2 Jack
3 Fred
将使用什么查询来显示该表。
发布于 2013-03-09 12:00:18
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;
https://stackoverflow.com/questions/15310380
复制