繁体   English   中英

如何根据返回的行 SELECT 多列?

[英]How can I SELECT multiple columns based on rows returned?

如果我运行 SELECT 查询并返回包含冗余信息的行,我如何在一行中显示该信息?

目前我的查询是这样的:

SELECT email, first_name, group FROM membership

这会返回一个结果集,如下所示:

------------------------------------
|    email    | first_name | group |
------------------------------------
|  bob@co.uk  |     bob    |   g1  |
|  jim@co.uk  |     jim    |   g1  |
|  jim@co.uk  |     jim    |   g2  |
|  jane@co.uk |    henry   |   g2  |
------------------------------------

相反,我需要结果集如下所示:

--------------------------------------------
|    email    | first_name | group | group |
--------------------------------------------
|  bob@co.uk  |     bob    |   g1  |       |
|  jim@co.uk  |     jim    |   g1  |   g2  |
|  jane@co.uk |    henry   |   g2  |       |
--------------------------------------------

重要的是,列名“组”尽管是多余的,但不会以不同的方式命名。

编辑:为清楚起见,组的数量可能会改变。 edit2:我使用的完整代码,用于初始查询,是:

SELECT 
    persons.mail AS email,
    persons.fname AS 'first_name',
persons.lname AS 'last_name',
groups.name as add_list
FROM group_membership
LEFT JOIN groups ON group_membership.gid = groups.gid
LEFT JOIN persons ON group_membership.uid = persons.uid
WHERE persons.mail != ""
ORDER BY last_name

你所要求的是不可能的。 如果有四行的值:

|  jim@co.uk  |     jim    |   g2  |

您是否希望结果有 4 个名为group的列,而不是您当前显示的两个group列?

你可能想要的是:

select email, first_name, group_concat(`group`) group by email, first_name

对于您的示例数据,这将执行以下操作:

select email, first_name,
  min(`group`) `group`, 
  case when max(`group`) <> min(`group`) then max(`group`) end `group`
from membership
group by email, first_name 

请参阅演示
结果:

> email      | first_name | group | group
> :--------- | :--------- | :---- | :----
> bob@co.uk  | bob        | g1    | 
> jane@co.uk | henry      | g2    | 
> jim@co.uk  | jim        | g1    | g2

根据上面的示例,以下将起作用

     SELECT email, first_name, max(case 
        when 
      group ='g1' then group else null end) 
       as groupg1, 
      max(case 
        when 
      group ='g2' then group else null end) 
       as groupg2
      FROM membership group by email, 
      first_name 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM