首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Mysql查询针对类别将同一列显示两次

Mysql查询针对类别将同一列显示两次
EN

Stack Overflow用户
提问于 2013-03-09 19:56:47
回答 1查看 317关注 0票数 0

我有一个表名user,在这个表中users有他们的名字和类别(例如:学生、雇员)。

现在,我想将其他表中的用户显示为按类型分隔的用户,就像所有学生用户将显示在学生列中,所有员工用户将显示在雇员列中一样。

示例:

用户表:

代码语言:javascript
代码运行次数:0
运行
复制
Name       Category
John       Student
Jack       Student
Fred       Employee

输出表:

代码语言:javascript
代码运行次数:0
运行
复制
ID    Student    Employee
1     John     
2     Jack
3                 Fred

将使用什么查询来显示该表。

EN

回答 1

Stack Overflow用户

发布于 2013-03-09 20:00:18

代码语言:javascript
代码运行次数:0
运行
复制
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

结果

代码语言:javascript
代码运行次数:0
运行
复制
╔════╦═════════╦══════════╗
║ ID ║ STUDENT ║ EMPLOYEE ║
╠════╬═════════╬══════════╣
║  1 ║ John    ║ (null)   ║
║  2 ║ Jack    ║ (null)   ║
║  3 ║ (null)  ║ Fred     ║
╚════╩═════════╩══════════╝

更新1

如果您有其他类别,那么最好使用动态sql,

代码语言:javascript
代码运行次数:0
运行
复制
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;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15310380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档